■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データベースのテーブルの内容までは変更されていません。 色々ごちゃ混ぜになっていてややこしくなっていますが、ご教授いただければ幸いです。 宜しくお願いします。
|
|