• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB2010 DataGridからmdb更新)

VB2010 DataGridからmdb更新

このQ&Aのポイント
  • VB2010でDataGridViewにmdbファイルから読み込んだ値を編集して更新する方法について教えてください。
  • DataGrid上で値を編集し、更新ボタンをクリックした際にmdbの中身を更新させたいですが、うまくいきません。
  • 試した方法としてBuilderを使う方法もありますが、上手くいきません。どのようにすれば更新できますか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんにちわ。 質問者さんもご自分で言っているように 上記ロジックではメモリ上のデータを変更しているにすぎません。 DataGridViewはMDBそのものではなく MDBのデータのみをDataAdapterを使用して抽出し表示しているだけだと認識しています。 つまり、DataGridView上で変更されたデータをMDB側に通知する必要があります。 質問者さんのロジックをそのまま流用するならば Dim ConectString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBPath Dim Cn As New OleDbConnection(ConectString) Dim SQLCm As OleDbCommand = Cn.CreateCommand Cn.Open() Dim dRow As DataRow Dim dTable As DataTable Dim i As Integer dTable = CType(DataGridView1.DataSource, DataTable) For Each dRow In dTable.Rows '変更された場合(Modified) If dRow.RowState = DataRowState.Modified Then '一度に編集状態をコミット dRow.AcceptChanges() SQLCm.CommandText = "[UPDATE文]" SQLCm.ExecuteNonQuery() End If Next という記述になると思います。 また、Adapter変数がプライベート、若しくはグローバルな変数であり 且つ、DataGridViewにバインドしたDataSetも同様の宣言をされているなら Builderを使用して Select Case Answer Case vbYes Dim builder As OleDbCommandBuilder Dim result As Integer builder = New OleDbCommandBuilder(Adapter) builder.GetUpdateCommand() result = Adapter.Update(ds.Tables(0)) End Select だけでも一括更新ができると思います。 よくわからなければ 「VB datagridview dataadapter」などで検索してください。 DataAdapter、DataSet、DataTableの基本的なところをおさえる方がいいと思います。

その他の回答 (1)

回答No.2

'一度に編集状態をコミット の内容が分かりませんが、 UPDATE文が発行されていないのではないでしょうか? Dim Cn As New SqlConnection("接続文字列") Dim Adapter As New SqlDataAdapter Dim Cmd As New SqlCommand Dim Table As New DataTable '▼表示 Private Sub 表示() Dim SqlStr As String = "SELECT * FROM AAA" Cmd.CommandText = SqlStr Adapter.SelectCommand = Cmd Adapter.Fill(Table) DataGridView1.DataSource = Table End Sub '▼更新 Private Sub 更新() Dim SqlStr As String Cn.Open() For Each Row In Table.Rows 'レコードが編集されているか判定する If Row.RowState = DataRowState.Modified Then SqlStr = "UPDATE AAA SET " SqlStr += " aaa = '" & Row("aaa") & "'," ’変更された文字列の場合 SqlStr += " bbb = '" & Row("bbb") & "'"  ’変更された文字列の場合 SqlStr += " WHERE id = " & Trim(Row("id")) ’キー Cmd = New SqlCommand(SqlStr, Cn) Cmd.ExecuteNonQuery() End If Next Cn.Close() End Sub '▼ビルダーの場合 Dim Builder As New SqlCommandBuilder(Adapter) Private Sub ビルダー() Adapter.Update(DataGridView1.DataSource) End Sub コード未確認ですが、基本的な表示と更新です。 ERRチェックしていません。TRYなど使って更新チェックください。

関連するQ&A