代码之家  ›  专栏  ›  技术社区  ›  onedaywhen

ACEDAO支持行级锁定吗?

  •  4
  • onedaywhen  · 技术社区  · 17 年前

    this Knowledge Base

    我从 Access team's blog :

    在Office Access 2007中,

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

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

    2 回复  |  直到 17 年前
        1
  •  7
  •   onedaywhen    17 年前

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

    记住,当网络上任何用户打开任何表,并且启用了行锁定时,DAO/ADO/ACE如何在代码中打开该表并不重要。

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

    因此,工具中的用户设置->选项确实决定了 用户 。为了清楚起见,不要吹毛求疵,UI的行锁定设置并没有真正覆盖选择,就像默认情况下强制解决问题一样。

    请记住,当您打开该功能时,行锁定的工作方式是,喷气发动机只是将记录的大小扩展到一页的大小,因此就像以前一样使用简单的老式页面锁定。这就是我所说的武力问题。如果用户启用了行锁定,然后您尝试抓取一个由用户锁定的记录集,而该记录集没有使用行锁定(而不是页面锁定)打开reocrdsset,那么它不会让一堆豆子变得不同。不允许您锁定和编辑记录,因为这再次归结为页面分辨率。

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

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

    首先,如果用户已经用表单锁定了记录,则将reocdset作为页面或行打开不会有任何区别。编辑数据的用户将决定页面的多少将被用完(如果打开行锁定,则是一整页数据)。

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

    归根结底,只有当你有几个用户试图以相同的形式获取相同的数据时,这个功能才真正合适。因此,这更像是一个用户界面功能,而不是使用代码+记录集。

    我手边没有一个链接可以解释这个记录页面锁定。我知道我在某个地方读过这个,但我没有链接。

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

    但是,您可以尝试一些代码来显示这一点。以下代码在未启用行锁定的情况下导致mdb膨胀约1兆(从约5.8兆增加到约6.5兆)。

    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
    

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

    http://www.kallal.ca/test/bloat.zip

        2
  •  0
  •   Community Mohan Dere    9 年前

    有关更多详细信息,请参阅我的答案:

    Is it better to use ADO or DAO in Access 2007?

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

    http://msdn.microsoft.com/en-us/library/aa165435(office.10).aspx

    推荐文章