トップ回答者
データセットとデータバインディングされたデータグリッドビューの更新について

質問
-
使用環境
WINDOWSXP
visualbasic EE
いつもお世話になっています。
oledbdataadapterを使用したデータベース更新を考えており、下記コードにて、データバインディングするところまで完成しました。
Dim Cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\sekisan.mdb")
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter("SELECT * FROM meisai_master", Cn)
Dim ds As DataSet = New DataSet("meisai_master")
da.Fill(ds, "meisai_master")
Me.BindingSource1.DataSource = ds
Me.BindingSource1.DataMember = "meisai_master"
DataGridView2.DataSource = BindingSource1このコードにて、既存データベースのテーブル(meisai_master)をデータグリッドビューに表示することはできるのですが、データグリッドビューのデータを編集した際の更新方法に疑問点があります。プログラム上ではなくデザイナ等で構築した更新方法は、データベースエクスプローラにて接続先を確立させ、それに伴いデータセットを作成しますよね。そして、データセットされたデータグリッドビューをフォームに配置すれば、主キーさえ設定したテーブルであれば、コマンドビルダーにてコマンドを自動生成できます。そして、更新もボタン一つでOKです。
結局、プログラム上でも同様のことをしたいわけですが、更新コードを下記コードのようにしました。
Dim Cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Sourcec:\sekisan.mdb")
Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter("SELECT * FROM meisai_master", Cn)
Dim ds As DataSet = New DataSet("meisai_master")Dim cb As OleDb.OleDbCommandBuilder = New OleDb.OleDbCommandBuilder(da)
da.Fill(ds, "meisai_master")*****************
ここです!!!!!
*****************
Try
Validate()
BindingSource1.EndEdit()
da.Update(ds, "meisai_master")
Catch ex As System.Exception
System.Windows.Forms.MessageBox.Show(ex.Message)
End Tryこれでは、更新するテーブルの器部分は出来ても、肝心な新しい編集データが保存できていないことになります。そこで、質問です。
コード中の*****の部分に直接編集データ等をコーディングしないで、バインディングされたデータグリッドビューのデータで更新したい場合、どのようにすればよいのでしょうか?
すべての返信
-
ありがとうございます。
更新(保存)できないうちに入るのでしょうね・・・。
下記コードだとテーブル構造をデータアダプタでデータセットに入れてますよね。
そして更新をかける際に、 da.Update(ds, "meisai_master")だと単に先ほどデータセットに入れた初期構造を更新するかたちになってしまい、結局データは不変となってしまいます。
バインディングされたデータを更新する際に良い方法はないでしょうか?
da.Fill(ds, "meisai_master")
*****************
ここです!!!!!
*****************
Try
Validate()
BindingSource1.EndEdit()
da.Update(ds, "meisai_master")
Catch ex As System.Exception
System.Windows.Forms.MessageBox.Show(ex.Message)
End Try -
-
da.fill(ds,"meisai_master")の部分を削除して、コードをやり直したらうまくいきました。(主キーが設定されているテーブルに関してはですけど・・・)。
というのが、このデータベースはデザイナを使用して主キーを設定したテーブルとプログラム上で動的に作成するテーブルとが存在しており、前者に関しては先に述べたとおり更新がうまくいきます。
私は、ADOXを使用してデータベース及びテーブルを作成していますが、使用するデータベースはMDBであり、ADOX以外の方法でデータベースを作成したいのですが、どのような方法があるのでしょうか?これについては、別スレッドで質問させていただくとして、主キーの設定方法は下記コードだとどのように記述すれば良いのでしょうか?宜しくお願いします。
Sub データベース作成()
'新規データベース作成
Dim cat As Object
cat = CreateObject("ADOX.Catalog")
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & AddressTextBox.Text & "\" & YearComboBox.Text & "\" & TextBox1.Text & ".mdb")'空明細テーブル作成
Dim strTable As String
Dim tbl As Object
tbl = CreateObject("ADOX.TABLE")
strTable = "meisai_master"
tbl.Name = strTable
cat.Tables.Append(tbl)
With cat.Tables(strTable)
.Columns.Append("Pnum")
.Columns.Append("Code")
.Columns.Append("Himoku")
.Columns.Append("Kosyu")
.Columns.Append("Suppli")
.Columns.Append("Unit")
.Columns.Append("Num")
.Columns.Append("UnitPrice")
.Columns.Append("TotalPrice")
.Columns.Append("Used")
.Columns.Append("Remarks")
End WithEnd Sub