0

最近我开始意识到记录集可能是一个比我最初想象的更简单(不太有用)的对象。我正在寻找其他人是否可以证实或否认我的怀疑。让我解释。当我创建两个 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)

假设每个记录集中的下一个值与前一个不同,第二个MsgBox rstA(0)应该警告第二个记录TableA,而第二个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 回答