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

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください