我是Microsoft Access新手。
如何在不同的表上使用相同的记录集变量?
答案 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 article和this in-depth book excerpt。
有过度简化的风险,我可以用这种方式总结问题:如果Access引用计数运行良好,则无需担心通过将引用设置为Nothing
来显式释放引用,也不必显式关闭记录集。 Howerver,实践经验告诉我们,鉴于Access的行为,这两种习惯应该是VBA最佳实践编码的一部分。