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 有啥区别
MS Access currentdb.excute 的结果与 Docmd.RunSQL 不同