- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESSへの更新に関して)
VB2008でACCESSの更新ができない原因は?
このQ&Aのポイント
- VB2008で開発している際に、デバックモードではACCESSの更新ができますが、コンパイルしてできあがったEXEから実行すると更新できません。エラーも起こらずに正常終了します。原因は何でしょうか。
- 環境はWindows7、ACCESS2000、VB2008で、参照設定はMicrosoft ActiveX Data Objects 2.8 Libraryです。
- コードによるデータベースへの書き込みでは、データベースファイル名を指定し、データベースパラメータを設定し、ADODBのコネクションを作成し、レコードセットをオープンして、データを書き込む処理を行っています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
とりあえずトランザクションを管理してみては? Cnn.BeginTrans() Try Rst.AddNew() Rst.Fields("項目1").Value = "AAA" Rst.Update() Cnn.CommitTrans() '★できればここでログを取りたい Catch 例外 As Exception Cnn.RollbackTrans() Throw 例外 End Try
その他の回答 (1)
- nda23
- ベストアンサー率54% (777/1415)
回答No.1
>If Rst.EOF Then EOFの時しか実行しませんよね? 既に1件以上データがあるのでは? >For jcount = 0 To icount - 1 icountが0以下じゃないでしょうね? これに値が仕込まれるステートメントは どうなっていますか? いずれも正常終了して何も起きない パターンです。
質問者
お礼
nda23様、いつもありがとうございます。 申し訳ありません。 掲載する為にかなりソースを削って、簡単な形に加工してしまった為、重要な部分までも削除して しまったようです。。。 >If Rst.EOF Then これに関しては、その前段階でテーブルの内容を全件削除しています。 その為、このIF文には必ず入ってきます。 本来このソースは、前述で他のテーブルからデータを取得し、そのデータをACCESSに書き込む という形をとっています。 従いまして、icountは必ずデータが存在する為、0件という事はないようになっています。 わかりにくい形となってしまっていて申し訳ありません。 尚、デバックモードでは必ずupdateへはたどり着き、更新もされています。 条件が違うという事もありません。。。。 どこかが間違っているのですよね。。。
お礼
nda23様、ご回答ありがとうございます。 教えて頂いたようにトランザクション管理をしてみたところ、 デバックモードでもCommitする際にエラーとなっていました。 その結果を踏まえて調査したところ、書き込み先のmdbが壊れているかも? という記述があった為、再度作成しなおした結果、問題なく更新されるように なりました。 なぜ直ったのか細かな部分まではわかりませんが。。。 nda23様、教えて頂き、本当にありがとうございました!