立て続けに申し訳ありません。
ListBoxにデータバウンドさせて、レコードをListBoxに表示させて、フォーカスをあたっているレコードを削除させたいとおもいまして、下記のコードを書いてみました。
「削除ボタン」をクリックすると、ListBoxの表示は消えるのですが、実際のレコードは削除されていません。
どのコードが悪いのか、それとも、何か足らないのかわかりませんでしたので、再び、投稿してみました。
ご指導をお願い申し上げます。
VB2008です。
Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient
Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
Dim oConn As New System.Data.OleDb.OleDbConnection()
Dim oCommand As New OleDbCommand()
Dim oDataAdapter As New OleDbDataAdapter()
Dim oDataSet As New DataSet()
Try
oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\dcu\DRS.mdb"
'コネクションの設定
oCommand.Connection = oConn
'DB接続を開く
oConn.Open()
'SQL文の設定
Const strSelect As String = "SELECT * FROM mdata"
oCommand.CommandText = strSelect
'データを取得する
oDataAdapter.SelectCommand = oCommand
oDataAdapter.Fill(oDataSet, "mdata")
Dim cm As CurrencyManager = Me.ListBox2.BindingContext(Me.ListBox2.DataSource)
Dim dr As DataRow = CType(cm.Current, DataRowView).Row
dr.Delete()
Dim oBui As OleDbCommandBuilder = New OleDbCommandBuilder(oDataAdapter)
'oBui.GetUpdateCommand().CommandText = "SELECT * FROM mdata"
oDataAdapter.Update(oDataSet, "mdata")
oConn.Close()
Catch oExcept As Exception
'例外が発生した時の処理
MessageBox.Show(oExcept.Message, "例外発生")
Finally
'DB接続を閉じる
If Not oConn Is Nothing Then
oConn.Close()
End If
End Try
End Sub
oDataAdapter.Update(oDataSet, "mdata")
でUpdateがきちんとできてないようです。
何か、不足しているのでしょうか?
よろしくお願い申し上げます。
drはoDataSet.Tables("mdata")に含まれる行ではないからでしょう。
New DataSet() は新しいDataSetのインスタンスを作成しますし,
異なるのDataSetに含まれる同名のTableは異なるのDataTableですし,
異なるDataTableに含まれる同一の位置に存在するDataRowは異なるDataRowです。
> oDataAdapter.Update(oDataSet, "mdata")
は,drから単に
oDataAdapter.Update(dr.Table)
とすればよいと思います。
当然,SELECTを発行する必要はありません。
YuOさま、お返事ありがとうございます。
早速
oDataAdapter.Update(dr.Table)
と直してデバックをしてみましたが、
「DeleteCommandの動的SQL生成は、キーである列情報を返さないSelectCommandに対してはサポートされていません。」
とのエラーが表示されます。
テーブルmdataの構造ですが、
値が重なってもいいように、Indexキーは設定していませんが、何かIndexをつけなければいけないのでしょうか?
すみません、お願い申し上げます。
mdataに、Indexキーのフィールドを追加しましたところ、上手く削除できました。
ありがとうございました。
ツイート | ![]() |