我是 Microsoft Access 的新手。
如何在不同的表上使用相同的记录集变量?
是的,只要您不希望变量指向两个记录集,您就可以。
然而问题是你为什么要这样做?您希望节省什么?资源?没有大碍。代码可读性也会受到影响。如果一周后您或其他人正在查看您的代码,他们可能不会意识到发生了什么。因此,我建议每个表/查询使用一个记录集变量。
还有变量的范围。如果在子例程/函数中定义,则它仅在该子/函数中可见。如果在顶部,它将对该表单/报告/模块中的所有 sou/function 可见。如果您在模块中声明它是全局的,那么它将在任何地方都可见。
所以问题是你为什么要问?
是的,但您必须确保在将记录集变量重新分配给另一个记录集之前关闭记录集。这是一个例子:
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。关于这个主题有一些很好的评论,分布在很多关于堆栈溢出的问题上;这与您的情况特别相关。我还将引导您阅读这篇知识库文章和这本深入的书摘。
冒着过度简化的风险,我可以这样总结问题:如果 Access 引用计数运行良好,则不必担心通过将引用设置为 来显式释放引用Nothing
,也不必担心显式关闭记录集。然而,实践经验告诉我们,鉴于 Access 的行为,这两种习惯都应该成为 VBA 最佳实践编码的一部分。