フォームのイベントプロシージャで、レコードソースの中身を入れ替え(削除して追加)ている。
- INTAns = delete原価計算tmp
- DoEvents
- INTAns = insert原価計算tmp(lngID)
- DoEvents
- Me.Requery
- Me.cbo単位.Requery
- Call cbo単位_AfterUpdate
入れ替えが終わった後、
- 5. の Me.Requery でフォームに反映させている。
- これが無いと、データは出来ているのに画面上は白紙状態になる。
1回目は上手く行くが、連続して動かすと「レコードは削除されています」のエラーが発生する。
直後にレコードソースを見ると、1件入っているのに何故?
苦肉の対応として、エラートラップでレコードが出来るまで待つことにした‥‥ら、上手く行く。
しかしこれは無限ループだ。このまま納品するには気が引ける。
《エラートラップ》
- If Err.Number = 3167 Then 'レコードは削除されています。
- Do: DoEvents: Loop While DCount("*", "W_原価計算") = 0
- Me.Requery: Resume Next
- 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回であった。(全てエラーになるとは限らない)