まりふのひと

レコードは出来ている(はず)のに「レコードは削除されています」が発生する

フォームのイベントプロシージャで、レコードソースの中身を入れ替え(削除して追加)ている。

  1. INTAns = delete原価計算tmp
  2. DoEvents
  3. INTAns = insert原価計算tmp(lngID)
  4. DoEvents
  5. Me.Requery
  6. Me.cbo単位.Requery
  7. Call cbo単位_AfterUpdate

入れ替えが終わった後、

  • 5. の Me.Requery でフォームに反映させている。
  • これが無いと、データは出来ているのに画面上は白紙状態になる。

1回目は上手く行くが、連続して動かすと「レコードは削除されています」のエラーが発生する。
直後にレコードソースを見ると、1件入っているのに何故?
苦肉の対応として、エラートラップでレコードが出来るまで待つことにした‥‥ら、上手く行く。
しかしこれは無限ループだ。このまま納品するには気が引ける。
《エラートラップ》

  1. If Err.Number = 3167 Then 'レコードは削除されています。
  2. Do: DoEvents: Loop While DCount("*", "W_原価計算") = 0
  3. Me.Requery: Resume Next
  4. End If

エラートラップ変更

エラートラップを for/next で1000回ループするように変更した。(下記は考え方のみ)

if err.number=3167 then
  for i=1 to 1000
    if dcount("*",W_原価計算")>0 then resume next
  next
endif
msgbox err.number & "/" & err.description,vbcritical,mbtitle
resume ‥‥

その後、「何回ループしたか」を出力するようにしたら、1回であった。(全てエラーになるとは限らない)