记录集解释?

时间:2013-01-15 15:02:24

标签: vba ms-access access-vba ms-access-2010

最近我意识到记录集可能比我原先想象的要简单得多(不太有用)。我想看看其他人是否可以证实或否认我的怀疑。让我解释。当我创建两个DAO记录集对象时,比如rstA和rstB,并将它们都设置到同一个表中,比如TableA,就像这样,

Set rstA = CurrentDb.OpenRecordset("TableA", dbOpenDynaset)
Set rstB = CurrentDb.OpenRecordset("TableA", dbOpenDynaset)
然后他们没有自主行为。例如,使用rstA.MoveNext移动记录,然后对rstB执行相同的操作。

最初,我认为记录集是“完整的”对象,但这种行为表明它们只是指向表格的指针。因此,该表持有它自己的指针来指示当前记录,这就是为什么用rstA或rstB移动这个指针会导致另一个影响另一个。

这是正确的还是我只是做错了什么?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-1)

在了解了一两件关于VBA之后,我想我可能已经找到了解决这个问题的方法。当我问这个问题时,我不知道Let关键字。如果我知道,那么我可能会尝试以下方法:

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

我仍然认为OpenRecordset方法会生成一个隐藏的记录集对象,因此使用Set关键字只会分发此隐藏记录集对象的地址。我还没有测试过这个理论,就像当时一样,我只是用一种完全不同的方式来解决我的问题。只是想更新帖子,以防以后可以帮助别人。