ADPとACCDBを書き換えていてこういう問題が起こった。
フォームのレコードをRecordsetで指定して、その中の値を更新するような作業である。
Dim rs as Recordset
Set rs=Forms(“someform”).Recordset
Do while Not rs.EOF
rs(“somefield1”).Value = rs(“somefield2”).Value
rs.MoveNext
Loop
ADPの時に上記のようなコードで普通に動いていた。本当はたぶん、
Forms(“someform”)!somefield1.Value
みたいに指定してアップデートして、DoCmdとかで次のレコードに移動するのが正しいかもしれない。あるいはどうせRecordsetでするなら、
rs.Open sql, currentproject.Connection,3,2
みたいなので開いてフォームと関係なくレコードセットのアップデートをするのがいいのかもしれない。
しかしいずれにしても、FormのRecordsetをそのまま指定してADOのレコードセットのように操作することはできて、それは実は便利な機能です。
ところが、ADPでは動いていたのにACCDBでは
Dim rs as Recordset
Set rs=Forms(“someform”).Recordset
Do while Not rs.EOF
rs.Edit
rs(“somefield1”).Value = rs(“somefield2”).Value
rs.MoveNext
Loop
を入れてやらないと動かなかった・・・・なぞです。