• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESSへの更新に関して)

VB2008でACCESSの更新ができない原因は?

このQ&Aのポイント
  • VB2008で開発している際に、デバックモードではACCESSの更新ができますが、コンパイルしてできあがったEXEから実行すると更新できません。エラーも起こらずに正常終了します。原因は何でしょうか。
  • 環境はWindows7、ACCESS2000、VB2008で、参照設定はMicrosoft ActiveX Data Objects 2.8 Libraryです。
  • コードによるデータベースへの書き込みでは、データベースファイル名を指定し、データベースパラメータを設定し、ADODBのコネクションを作成し、レコードセットをオープンして、データを書き込む処理を行っています。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

とりあえずトランザクションを管理してみては? Cnn.BeginTrans() Try   Rst.AddNew()   Rst.Fields("項目1").Value = "AAA"   Rst.Update()   Cnn.CommitTrans()   '★できればここでログを取りたい Catch 例外 As Exception   Cnn.RollbackTrans()   Throw 例外 End Try

asamix_000
質問者

お礼

nda23様、ご回答ありがとうございます。 教えて頂いたようにトランザクション管理をしてみたところ、 デバックモードでもCommitする際にエラーとなっていました。 その結果を踏まえて調査したところ、書き込み先のmdbが壊れているかも? という記述があった為、再度作成しなおした結果、問題なく更新されるように なりました。 なぜ直ったのか細かな部分まではわかりませんが。。。 nda23様、教えて頂き、本当にありがとうございました!

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

>If Rst.EOF Then EOFの時しか実行しませんよね? 既に1件以上データがあるのでは? >For jcount = 0 To icount - 1 icountが0以下じゃないでしょうね? これに値が仕込まれるステートメントは どうなっていますか? いずれも正常終了して何も起きない パターンです。

asamix_000
質問者

お礼

nda23様、いつもありがとうございます。 申し訳ありません。 掲載する為にかなりソースを削って、簡単な形に加工してしまった為、重要な部分までも削除して しまったようです。。。 >If Rst.EOF Then これに関しては、その前段階でテーブルの内容を全件削除しています。 その為、このIF文には必ず入ってきます。 本来このソースは、前述で他のテーブルからデータを取得し、そのデータをACCESSに書き込む という形をとっています。 従いまして、icountは必ずデータが存在する為、0件という事はないようになっています。 わかりにくい形となってしまっていて申し訳ありません。 尚、デバックモードでは必ずupdateへはたどり着き、更新もされています。 条件が違うという事もありません。。。。 どこかが間違っているのですよね。。。

関連するQ&A