在Access中,这两个语句有什么区别?
DBEngine.BeginTrans
和
DBEngine.Workspaces(0).BeginTrans
两者的文档都指向同一个地方。
答案 0 :(得分:7)
看看这里:DAO Workspace
然后在这里:DAO Workspace: Opening a Separate Transaction Space
(链接适用于MFC,但它们适用于您编码的任何内容。)
DBEngine.Workspaces(0)
是默认工作区。可以创建其他工作区,使您可以使用单独的会话;我们的想法是BeginTrans
和EndTrans
适用于整个工作区,但如果您需要在该事务之外执行某些操作,则可以创建另一个工作区并独立于第一个工作区中的事务使用它。 / p>
就个人而言,在VBA中执行DAO时,我从未有过使用多个工作区的机会。 *耸肩*
答案 1 :(得分:2)
我自己的回答:
似乎DBEngine.BeginTrans和DBEngine.Workspaces(0).BeginTrans做同样的事情,因为这段代码有效(见下文)。 “Workspaces”是DBEngine的默认成员。
Dim db As Database
Set db = CurrentDb
DBEngine.BeginTrans
db.Execute "Update Table1 SET CITY='Newark'"
DBEngine.Workspaces(0).Rollback
答案 2 :(得分:0)
在Access应用程序界面中,一次只能打开一个数据库容器。在VBA代码中,您可以在Workspace中打开多个数据库实例。有关在一个工作区中打开多个数据库的示例,请参阅Workspace.OpenDatabase方法(或http://msdn.microsoft.com/en-us/library/bb243164.aspx)的帮助文件文档。
可以推断,当工作区中打开的所有底层数据库都支持事务时,Workspace的BeginTrans方法将应用于所有数据库。我怀疑那里有龙,但我确信它可以在一个工作区内使用两个MDB。当Workspace中只打开一个数据库时,Workspace.BeginTrans和Database.BeginTrans确实是相同的。
答案 3 :(得分:0)
正如斯波克曾经说过的那样,没有区别的差别没有区别......