我可以在不同的表上使用相同的记录集变量吗?

时间:2011-01-31 01:28:41

标签: ms-access recordset multiple-tables

我是Microsoft Access新手。

如何在不同的表上使用相同的记录集变量?

2 个答案:

答案 0 :(得分:2)

是的,只要您不希望变量指向两个记录集,就可以。

然而问题是你为什么?你期望保存什么?资源?没有大碍。代码可读性也会受到影响。如果你从现在起一周或以后有人在看你的代码,他们可能没有意识到发生了什么。因此,我建议每个表/查询使用一个记录集变量。

还有变量的范围。如果在子程序/函数中定义,那么它仅在该子/函数中可见。如果在顶部,那个表单/报告/模块中的所有sou / function都可以看到它。如果你在模块中声明它是全局的,那么它随处可见。

所以问题是你为什么要问?

答案 1 :(得分:0)

是的,但在将记录集变量重新分配给另一个记录集之前,必须确保关闭记录集。这是一个例子:

Dim rs As DAO.Recordset
Dim bTimeToChangeRecordsets As Boolean

Set rs = CurrentDb.OpenRecordset("Contacts")

'add business logic here'

If bTimeToChangeRecordsets Then
    rs.Close
    'setting to Nothing is not necessary here,'
    'because setting to a new recordset instance has the '
    'same effect on the variable reference count '
    Set rs = CurrentDb.OpenRecordset("Comments")
End If

'more business logic'

rs.Close
Set rs = Nothing

关于这个问题的许多评论都集中在需要将记录集变量设置为Nothing,是否以及何时需要,以及在释放记录集之前是否还需要在记录集上调用Close参考。关于堆栈溢出的相关问题,这个主题有一些很好的评论。 this one与您的情况特别相关。我还会引导您this knowledgebase articlethis in-depth book excerpt

有过度简化的风险,我可以用这种方式总结问题:如果Access引用计数运行良好,则无需担心通过将引用设置为Nothing来显式释放引用,也不必显式关闭记录集。 Howerver,实践经验告诉我们,鉴于Access的行为,这两种习惯应该是VBA最佳实践编码的一部分。