ADPとACCDBで、Recordsetの挙動が違う?

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

を入れてやらないと動かなかった・・・・なぞです。