■14215 / ) |
DataGridViewの変更をアクセスデータベースに反映 |
□投稿者/ いの (1回)-(2008/02/13(Wed) 14:10:44)
|
分類:[VB.NET/VB2005]
環境:VS2005 OS:Windows XP 言語:VB
初めまして。こちらも含めてVBの質問は初めてになりますが、よろしくお願いします。 至らないところがあればすみません。
今、Accessデータベースのテーブルを取得して、DataGridViewに表示させています。 そこから、任意にDataGridViewの内容を変更(変更させる列は決まっています)し、まずDataGridViewに反映させます。 次にAccessデータベースのテーブルに変更した内容を反映させる予定です。 本やインターネットで色々調べたのですがどうしてもうまくいかず、こちらで質問させていただきます。 プログラムは以下の通りです。ある程度簡略化して書きます。
Dim A As New DataTable Dim E As OleDb.OleDbCommand Dim F As OleDb.OleDbConnection = New OleDb.OleDbConnection Dim G As OleDb.OleDbTransaction F.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=Access.mdb;Persist Security Info=False"
F.Open() E = F.CreateCommand G = F.BeginTransaction() E.Connection = F E.Transaction = G E.CommandText = "UPDATE Accessテーブル SET 〜〜〜 WHERE 〜〜〜" E.ExecuteNonQuery() G.Commit() F.Close()
For Each Row As DataRow In A.Rows Dim SQL As String = ""
Select Case Row.RowState Case DataRowState.Modified
SQL = "UPDATE Accessテーブル SET 〜〜〜 WHERE 〜〜〜"
Case Else Continue For
End Select
E.CommandText = SQL F.Open() E.ExecuteNonQuery() F.Close()
Next
Row.AcceptChanges()
A.Dispose() F.Dispose()
本では、OleDB.OleDBDataAdapterやDataSetを使い、データセットにコマンドビルダを作成、 DataAdapterをUPDATEしてデータベースに反映させていますが、うまくいきませんでした。 上のプログラムはインターネット上でのやり方(アレンジはしています)で書いていますが、これもうまくいっていません。 トランザクション処理も混ぜています。2回ExecuteNonQueryしていますが1回でも十分なことは確認済みなんですが、 こういうやり方もしていますってことで書いてみました。 SQL文は、DataGridViewの内容にCheck Boxや数値、文字が混じっていますので、DataBindingでLabelと関連付けて書いています。
上のプログラムの内容ですと、DataGridViewの内容は変更されています。イミディエイトウインドウでもModifiedになっています。 しかし、Accessデータベースのテーブルの内容までは変更されていません。
色々ごちゃ混ぜになっていてややこしくなっていますが、ご教授いただければ幸いです。
|
|