0

最近、レコードセットは当初考えていたよりもはるかに単純な (あまり役に立たない) オブジェクトである可能性があることに気付きました。他の人が私の疑いを肯定または否定できるかどうかを確認しています. 説明させてください。2 つの DAO レコードセット オブジェクト (rstA と rstB など) を作成し、両方を同じテーブル (TableA など) に設定すると、次のようになります。

Set rstA = CurrentDb.OpenRecordset("TableA", dbOpenDynaset)
Set rstB = CurrentDb.OpenRecordset("TableA", dbOpenDynaset)

その後、彼らは自律的に行​​動しません。たとえば、 を使用してレコードを移動rstA.MoveNextすると、rstB に対しても同じことが行われます。

当初、私はレコードセットを「本格的な」オブジェクトと考えていましたが、この動作は、レコードセットが単にテーブルへのポインターであることを示しています。したがって、テーブルは現在のレコードを示す独自のポインターを保持しています。これが、このポインターを rstA または rstB で移動すると、一方が他方に影響を与える理由です。

これは正しいですか、それとも単に何か間違ったことをしていますか?

4

2 に答える 2

8

あなたは何か間違ったことをしています。

各レコードセットは独立したオブジェクトである必要があり、使用しrstA.MoveNextても に影響はありませんrstB

次のコードを試してください。

MsgBox rstA(0)
MsgBox rstB(0)

rstA.MoveNext

MsgBox rstA(0)
MsgBox rstB(0)

各レコードセットの次の値が前の値と異なると仮定すると、2 番目の値はMsgBox rstA(0)の 2 番目のレコードに警告し、2TableA番目の値MsgBox rstB(0)は の最初のレコードに警告しTableAます。

于 2013-01-15T15:11:48.347 に答える
-1

VBA について少し学んだら、この問題の解決策を見つけたかもしれません。この質問をしたとき、私は Let キーワードを知りませんでした。もし私が気づいていたら、おそらく次のことを試していただろう:

Let rstA = CurrentDb.OpenRecordset("TableA", dbOpenDynaset)
Let rstB = CurrentDb.OpenRecordset("TableA", dbOpenDynaset)

OpenRecordset メソッドは非表示のレコードセット オブジェクトを生成するので、Set キーワードを使用すると、この非表示のレコードセット オブジェクトのアドレスが単純に渡されると思います。私はまだこの理論をテストしていません。当時、私は自分の問題を解決するためにまったく別の方法を使用していました. 後で他の人に役立つ可能性がある場合に備えて、投稿を更新したかっただけです。

于 2013-01-30T20:19:12.297 に答える