set dbs=currentdb() 和直接使用 currentDB() 之间有啥重要区别吗?

Posted

技术标签:

【中文标题】set dbs=currentdb() 和直接使用 currentDB() 之间有啥重要区别吗?【英文标题】:Is there any important difference between set dbs=currentdb() and using currentDB() directly?set dbs=currentdb() 和直接使用 currentDB() 之间有什么重要区别吗? 【发布时间】:2014-01-28 21:08:39 【问题描述】:

我继承了很多基本上是这样的代码:

dim dbs as dao.database
set dbs = currentdb()
dbs.execute "Some SQL string"
set dbs = nothing

有什么理由不将其重新编码为:

currentdb().execute "some  SQL string"

(我知道如果我想使用 .recordsaffected,currentdb().recordsaffected 不会产生可用的结果)。

除了简化代码之外,重新编码还有什么好处吗?

【问题讨论】:

【参考方案1】:

简单地使用CurrentDb.Whatever 是一个诱人的捷径,但在很多情况下它会导致奇怪的行为。那是因为CurrentDb 本身不是一个对象,它是一个返回当前数据库对象副本的函数。

几年前,我在无数次调试我知道是“正确”的代码之后,我发誓不再尝试使用 CurrentDb,就像它是一个对象一样,它是......曾经我创建了一个正确的 DAO.Database 对象 (Set cdb = CurrentDb) 并使用 cdb.Whatever 而不是 CurrentDb.Whatever

【讨论】:

如果只使用它来设置记录集呢? IE。设置 rst = currentdb.openrecordset()... @HelloW 对于生产代码,我总是创建一个适当的 DAO.Database 对象,无论其预期用途如何。偶尔对于“丢弃”代码我会变得懒惰并使用CurrentDb.Whatever,但在我看来这是一个坏习惯。在性能或代码可读性方面的任何假定收益实际上都可以忽略不计,并且由于在使用CurrentDb.Whatever 变得奇怪的情况下,我宁愿保持一致,而不必记住它何时工作以及何时不工作' t.

以上是关于set dbs=currentdb() 和直接使用 currentDB() 之间有啥重要区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

DoCmd.SetWarnings 和 CurrentDB.Execute 有啥区别

如何使用 VBA 创建 CurrentDb 的副本

MS Access currentdb.excute 的结果与 Docmd.RunSQL 不同

访问VBA:在CurrentDb.OpenRecordset上键入不匹配

mysql安装

设置 rst = CurrentDb.OpenRecordset(strSQL) 返回“无效的过程调用”