C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 30 を表示中)
■14333 / )  Re[1]: DataGridViewの変更をアクセスデータベースに反映
□投稿者/ いの (4回)-(2008/02/15(Fri) 12:47:01)
No14215 (いの さん) に返信
結構プログラムを変更しましたので、あげさせていただきます。依然解決には至っていません。

プログラムは以下の通りです。

    Dim A As DataRow
Dim B As New DataTable
Dim C As New OleDb.OleDbDataAdapter
Dim D As OleDb.OleDbCommandBuilder
Dim E As OleDb.OleDbCommand
Dim F As OleDb.OleDbConnection = New OleDb.OleDbConnection
Dim H As OleDb.OleDbTransaction

F.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=Access.mdb;Persist Security Info=False"

F.Open()
E = cn1.CreateCommand
H = cn1.BeginTransaction()
E.Connection = F
E.Transaction = H
E.CommandText = "UPDATE Accessテーブル SET 〜〜〜 WHERE 〜〜〜"
H.Commit()
F.Close()

B = CType(DataGridView1.DataSource, DataTable)
C = New OleDb.OleDbDataAdapter(E)

aa1.Fill(dtTable1)
DataGridView1.DataSource = B

For Each Row As DataRow In B.Rows
Dim SQL As String = ""

Select Case Row.RowState
Case DataRowState.Modified

SQL = "UPDATE Accessテーブル SET 〜〜〜 WHERE 〜〜〜"
MessageBox.Show("変更しました。")
Case Else
Continue For

End Select

Dim I As OleDb.OleDbCommand = F.CreateCommand

I.CommandText = SQL

F.Open()
I.ExecuteNonQuery()
F.Close()

Next

For Each A In B.Rows
If A.RowState <> DataRowState.Unchanged Then
A.AcceptChanges()
End If
Next

D = New OleDb.OleDbCommandBuilder(C)

C.Update(B)

End Sub

上のプログラムは本とインターネット上でのやり方(アレンジはしています)で書いていますが、うまくいっていません。
SQL文は、DataGridViewの内容にCheck Boxや数値、文字が混じっていますので、DataBindingでLabelと関連付けて書いています。

上のプログラムの内容ですと、DataGridViewの内容は変更されています。イミディエイトウインドウでもModifiedになっています。
修正前のプログラムでは、見かけ上変更されているだけでした(Data Rowの内容は変更されていなかったみたいです)。
今のプログラムは、MessageBoxの"変更しました。"が表示されていますので大丈夫だと思います。
しかし、Accessデータベースのテーブルの内容までは変更されていません。
色々ごちゃ混ぜになっていてややこしくなっていますが、ご教授いただければ幸いです。
宜しくお願いします。


返信 編集キー/


管理者用

- Child Tree -