Ms access ACEDAO支持行级锁定吗?

Ms access ACEDAO支持行级锁定吗?,ms-access,ms-access-2007,jet,Ms Access,Ms Access 2007,Jet,DAO3.6存在一个问题,它不支持行级锁定。有关详细信息,请参阅文章 我从中学到: 在Office Access 2007中,新对象, 将添加属性和方法 到DAO以支持中的新功能 Access数据库引擎 通过在Access2007 Visual Basic编辑器的对象浏览器中查看此库,可以看出新的版本称为ACEDAO。我可以在MSDN的修补程序中找到acedao.dll,但没有其他内容 有人知道在哪里可以找到ACEDAO的最终用户文档吗 我如何才能发现ACEDAO是否支持行级锁定?我认为这篇知识

DAO3.6存在一个问题,它不支持行级锁定。有关详细信息,请参阅文章

我从中学到:

在Office Access 2007中,新对象, 将添加属性和方法 到DAO以支持中的新功能 Access数据库引擎

通过在Access2007 Visual Basic编辑器的对象浏览器中查看此库,可以看出新的版本称为ACEDAO。我可以在MSDN的修补程序中找到acedao.dll,但没有其他内容

有人知道在哪里可以找到ACEDAO的最终用户文档吗


我如何才能发现ACEDAO是否支持行级锁定?

我认为这篇知识库文章中没有任何变化。但是,您必须记住记录锁定是如何实现的

请记住,当网络上的任何用户打开任何表时,并且他们启用了行锁定,那么DAO/ADO/ACE如何在代码中打开该表就无关紧要了

任何具有行锁定的现有用户都将强制对他们正在使用的记录进行行锁定。而且,由于记录集代码很少会在合理的时间内保持记录的打开/锁定状态,因此页面锁定或行锁定在这里几乎不会起作用。因此,在大多数情况下,当用户编辑表单中的数据时,需要锁定。就代码而言,这往往是一个罕见的问题

因此,工具->选项中的用户设置实际上决定了用户的选择。这里要明确一点,而不是吹毛求疵,UI的行锁定设置并没有真正覆盖选择,就像默认情况下它会强制解决问题一样

请记住,当您打开该功能时,行锁定的工作方式是,jet引擎只是简单地将记录的大小扩展到一个页面的大小,因此只是像以前一样使用简单的老式页面锁定。这就是我所说的武力问题。如果用户启用了行锁定,然后您尝试获取一条由用户锁定的记录,而该记录集没有使用行锁定(与页面锁定相反)打开ReoCrdSet,那么这不会使一堆bean有所不同。不允许您锁定和编辑记录,因为这又取决于页面分辨率

没有真正的行锁。但是,如果您将记录的大小扩展为始终为一页,那么您将以迂回的方式实现相同的目标

鉴于上述信息,这意味着两件事:

首先,如果用户已经用表单锁定了记录,那么以页面或行的形式打开reocdset不会有任何区别。编辑数据的用户将确定页面的使用量(如果启用行锁定,则为整页数据)

第二期。您需要仔细考虑使用此选项,因为它会导致文件快速膨胀,因为编辑的每个记录将被迫占用一个数据库页面。如果您运行的代码更新了数千条记录,那么您可能不想这样做。然而,用户无法在一天内真正编辑这么多记录,并且使用每日压缩例行程序,这不再是一个问题

从逻辑上讲,这意味着该选项仅在用户彼此绊倒时才对编辑数据有用。然而,对于记录集代码,使用行锁定很少有帮助,甚至是不合适的

最终,只有当您有多个用户试图以相同的形式获取相同的数据时,该功能才真正合适。因此,这更像是一个用户界面特性,而不是使用代码+记录集

您可能会发现ACE+dao可以使用行锁定打开reocrdset,但为什么要担心呢?你不用刀,反正你也不喜欢。而且,无论如何也不可能改变你的用户场景

--编辑:

我手头没有一个链接来解释这个记录页面锁定。我知道我在什么地方读过,但我没有链接

过去几天我真的很忙(我是access 2010测试版的一部分,周一还向注册的公众发布了CTP)。所以,我最近真的很忙

但是,您可以尝试一些代码来显示这一点。下面的代码导致mdb中大约1兆的膨胀,而没有启用行锁定。(从约5.8兆欧到约6.5兆欧)

如果在打开记录锁定的情况下运行相同的代码,文件的大小将达到123兆。下面是一个示例mdb的链接,其中包含上述代码

所以,请下载上面的内容。使用工具->选项->高级->行级锁定打开运行它

然后,清空桌子。紧凑和维修。更改上述设置并再次运行(确保退出,然后在更改该设置后重新进入数据库)


如果您在没有行锁定的情况下运行上述命令,则文件将增加大约1兆。如果您在行锁定打开的情况下运行它,您将获得超过110兆的数据文件增量。这确实是一个很大的区别。

至少ACEDAO是这样,而且很可能DAO默认使用记录级锁定,而不管MS文档如何。这可以通过使用相同的DAO代码从基础Access 97 DB切换到Access 2000或ACCDB后发生的膨胀(如上所述)来证明

有关更多详细信息,请参见我的回答:

编辑以反映包含正确信息的MSDN链接:

记录级锁定是ADO和DAO记录集对象的默认设置。页面级锁定是使用ADO命令对象或DAO QueryDef对象的SQL DML语句(批量操作,如UPDATE、DELETE和INSERT INTO语句)的默认设置


非常详细,感谢您的额外努力。你知道我在哪里可以找到关于整个ACEDAO行级别锁定的事情吗?Albert,你能给我引证一下吗?这对我来说肯定是个新闻
Dim rst        As DAO.Recordset
Dim i          As Long
Dim t          As Single

Set rst = CurrentDb.OpenRecordset("contacts")

t = Timer
Me.Text1 = "working..."
DoEvents
Do While rst.EOF = False
   rst.Edit
   i = i + 1
   rst!City = "ci " & i
   rst.Update

   rst.MoveNext

   If i Mod 500 = 0 Then
      Me.Text1 = i
      DoEvents
   End If


Loop

t = Timer - t
Me.Text1 = "done in " & t & " seconds"
Beep