• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:「実行時エラー '3167' レコードは削除されています。」を回避する方法)

実行時エラー '3167' レコードは削除されています。

このQ&Aのポイント
  • VB6とACCESS97でソフト開発をしています。フォームにDBGridを配置し、クエリの結果を表示させていますが、多くの場合に「実行時エラー '3167' レコードは削除されています。」のエラーが出ます。
  • エラーを回避する方法を教えてください。
  • 以下は、コーディングの一部です。Data1.DatabaseName = MDB_Path & "株.mdb" '------ クエリのセット ------------------------------------------------ Set MyQuery = dbs.QueryDefs("連結決算Q") SQL = "SELECT 決算チェックT.銘柄CD, [当日株価T].銘柄名, [当日株価T].市場"

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

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

「時間待ち」の為に「空ループを回し、その中にDoEventsを入れる」のが間違いです。 もし、ボタン押下など、イベントに拠って呼ばれるプロシジャ内で、こういう時間待ちをしていると、マニュアルにも書いてあるように 「もう一度同じプロシージャが呼び出され、実行結果が不定になる」 と言う事が起きます。 http://homepage2.nifty.com/kasayan/vba/doevents.htm プログラム中の「DoEventsを完全にすべて排除」し、代わりに Application.Wait(Now + TimeValue("0:00:10")) など、WaitメソッドかSleep関数を使用しましょう(上記の例は「10秒待つ」です) 「DoEventsを完全にすべて排除」しない限り、そのエラーは抑止出来ません。 因みに「OnError Gotoでエラーハンドリングを行なう」事で「エラーが起きている事を隠す」ことは出来ますが「実行結果が不定で、システムが不安定になり、いつ、何が起きるか判らない」のは変わりません。 残念ですが「DoEventsを使っている限り、客先に提供可能なプログラム品質は確保出来ない」と思って下さい。

suzu-mitu
質問者

お礼

ご回答ありがとうございました。 「DoEventsを完全にすべて排除」して試して見ます。

関連するQ&A

専門家に質問してみよう