DBEngine.BeginTrans和DBEngine.Workspaces(0)之间的区别.BeginTrans

时间:2009-01-07 21:52:14

标签: ms-access transactions

在Access中,这两个语句有什么区别?

DBEngine.BeginTrans

DBEngine.Workspaces(0).BeginTrans

两者的文档都指向同一个地方。

4 个答案:

答案 0 :(得分:7)

看看这里:DAO Workspace
然后在这里:DAO Workspace: Opening a Separate Transaction Space

(链接适用于MFC,但它们适用于您编码的任何内容。)

DBEngine.Workspaces(0)是默认工作区。可以创建其他工作区,使您可以使用单独的会话;我们的想法是BeginTransEndTrans适用于整个工作区,但如果您需要在该事务之外执行某些操作,则可以创建另一个工作区并独立于第一个工作区中的事务使用它。 / 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)

正如斯波克曾经说过的那样,没有区别的差别没有区别......