mdbをデータソースとして、dataTableに読み込み、UI側から消したい行を選び、削除する。
たったこれだけなのですが、希望通りにmdbに変更はかかってくれず困っております。
Public Class form1 'コネクション Private m_Conn As System.Data.OleDb.OleDbConnection
このようにインスタンス変数としてコネクションは宣言しておき
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & System.Windows.Forms.Application.StartupPath & "\" & m_strDataFile m_Conn = New System.Data.OleDb.OleDbConnection(ConnectionString) m_Conn.Open()
このようにformのロード時にDBを開き、formclosingの際にm_Conn.close()しています。
特定の値をキーにコントロールに値を読み込み表示させ、ユーザが削除ボタンを押した際には
データに消えて欲しいので、datatableの該当レコードを読み込み
result = juchuDt.Select("XXX_DENNO=" & denNum) For Each a As DataRow In result a.Delete() a.AcceptChanges() Next juchuDt.AcceptChanges() adpt.Update(result)
debuggerからjuchuDt.countを見ると確実に減っています。
juchuDt.Select("XXX_DENNO=" & denNum)で指定の番号でSELECTをかけてもDataTableには存在しません。
そしてこのままフォームをクローズする際にコネクション(m_Conn)を.close()して終わらせます。
そして、また開くとデータが存在しているのです(上記codeを実行後も、別のデータを参照した時も消したデータはデータテーブルから消えていたのに、です)
色々検索してみましたが、DataSet.AcceptChanges()で、変更はデータセットのすべてのテーブルのすべての行にコミットされます。と明記されているので上記コードだとadpt.Update(result)で更新されると思ったのですが何か理解していない点があるのでこういう結果を招いていると思います。
不思議なことに、レコード新規登録時のjuchuDt.Rows.Add(wr)はmdbファイルに実際に更新を掛けます。
どなたか心当たりのあるから、ご教授いただけませんでしょうか。よろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。