24
2024
06
16:17:18

Access数据库临时文件.ldb及.laccdb的详细解释及它的用途-Access基础知识(更新第2次)



推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

一、何时会生成临时文件.ldb及.laccdb

Access数据库打开时根据Access数据库文件版本的不同,会生成临时文件.ldb或.laccdb

一般Access 2003或之前版本:数据库名.ldb

Access2007或之后版本:数据库名.laccdb


二、.ldb及.laccdb文件的用途

1、以下是.laccdb的解释(.ldb文件的作用类似)

该LACCDB文件扩展名通常与Microsoft Access数据库创建的(微软公司创建的Microsoft Office套件程序之一)。

LACCDB通常文件包含在MDB Access数据库文件的锁定信息的锁定数据,并防止它被改变或由一个以上的用户改写。

组织: Microsoft Corporation

位置: HKEY_CLASSES_ROOT\.laccdb


LACCDB文件被称为Microsoft Access中锁定的文件。

该.ACCDB文件扩展名是由微软开发的,用于引用使用Access 2007中创建锁定文件的文件。

.ACCDB文件包含数据库锁,他们在预防意外覆写或删除的玩了很多。

.ACCDB文件是自动通过Access 2007中创建并发生这种情况时, .ACCDB文件被打开。一旦这些.ACCDB文件被关闭, .ACCDB由Access创建的文件也将自动关闭。他们与同一个目录下的ACCDB文件有相似的名称,只是扩展名不同。小辣椒高效Office。

.LACCDB文件和旧版本的Access创建.LDB文件,有异曲同工之妙。

.ACCDB文件可以在Windows上使用的Microsoft Access 2010或更高版本打开。这种应用程序允许错误的减少和节省时间,当它通过局域网或互联网来发布,管理和共享的数据文件,同时保持数据保护。

2、以下是对早期Access版本生成的.ldb文件的描述

当我们打开Access数据库文件时会发现在相同的目录下会产生一个同名的.ldb文件

自动 .ldb 文件创建和删除

小辣椒高效Office:为存储计算机和安全名称并扩展字节范围锁放置为用于共享, 打开一个数据库后,都会自动创建一个 .ldb 文件。 .ldb 文件始终与打开数据库 (.mdb) 同名, 位于同一文件夹作为打开数据库。 在同一文件夹中例如, 如果 (对于共享使用) 在 C:\ProgramFiles\Microsoft Files\Microsoft Office\Office\Samples 文件夹, 打开 Northwind.mdb 示例数据库然后是自动创建名为 Northwind.ldb 文件。 只有当最后用户关闭共享数据库, .ldb 文件才会自动被删除。 唯一例外是当用户没有删除权限或数据库被标记为损坏,.ldb 文件不删除因为它包含有关谁已使用数据库同时信息数据库已标记为损坏。

当您关闭了数据库,如果.ldb还存在,您可以手动删除它,以避免一些莫名的错误发生。

.ldb 文件内容

记录了谁打开共享数据库, Jet 数据库引擎将条目数据库 .ldb 文件中。 大小的各个 .ldb 项是 64 字节。 前 32 字节包含计算机名称 (例如, JohnDoe)。 二 32 字节包含安全名称 (如管理员)。 并发用户Jet 数据库引擎支持最大数目是 255 ; 因此, .ldb 文件大小是从不大于 16 KB。

当用户关闭共享数据库, 用户不删除从 .ldb 文件。当其他用户打开数据库但是, 它可能被覆盖。 这意味着您无法使用 .ldb 文件单独确定谁正在使用数据库。

.ldb文件是.mdb文件打开时产生的一个临时文件。.ldb文件在多用户环境下是非常重要的。该文件被 MS Jet DB Engine(MicrosoftJet数据库引擎) V4.0 用来确定被共享的数据库中哪条记录被锁定以及被谁锁定

.ldb文件是由共享数据库的使用者自动创建以及删除得。.LDB文件建立并存储计算机名、用户名以及放置扩展域锁的。.LDB文件一般与 .MDB 同名,并且与 .MDB 文件在相同目录,在 .MDB 文件被打开时建立并锁定。当最后一个用户关闭共享数据库时 .ldb文件会被自动删除。但是当用户没有正常关闭数据库或者数据库已经被标记为损坏,那么 .LDB文件不会被自动删除,因为 .LDB文件中存储着数据库损坏时谁正在使用该数据库。

MS JET DB ENGINE 会为每个以共享方式打开数据库的使用者在 .LDB文件中创建一个条目,每个条目的大小是 64字节。前面 32 字节保存计算机名,后面 32 字节保存用户名。JET DB ENGINE支持的最大用户数是 255,因此 .LDB文件的大小不会超过 16 KB。

当一个用户关闭一个共享数据库时,该用户在 .LDB文件中的条目不会立即被删除,可是该条目会在下一个用户打开这个数据库时被覆盖。这也就意味着你不能通过 .LDB文件来唯一确定谁是某个数据库的当前使用者。

.ldb 文件用法

Jet 数据库引擎使用为防止用户在将数据写入, 其他用户已经锁定页并确定谁有其他页锁定 .ldb 文件信息。 如果 Jet 数据库引擎检测到与其他用户, 锁冲突它读取 .ldb 文件以获取计算机和安全性的用户具有文件或记录名称锁定。

JET DB ENGINE 使用 .LDB文件中的信息来确定谁锁定了数据,谁正在写入被其他人锁定的数据。如果 JET DB ENGINE发现有其他用户的锁定冲突,它会读取 .LDB文件以获取计算机名与用户名谁锁定了文件或者记录。在多数锁定冲突情况下,你会在存储记录时得到一个 “写入冲突”的提示并且取消你所做的修改。在有些情况下你会得到如下提示:Couldn''t lock table <table name>; currently in use by user <securityname> on computer <computer name>.

在大多数锁冲突情况, 接收使您得以保存记录, 将它复制到剪贴板, 一般 " 写入冲突 " 消息或除去所做更改。 在某些情况下, 但是, 您收到以下错误消息:

无法锁定表 < 表名 > ; 当前中使用由用户安全 < 名称 >上。

注意 : 如果 .ldb 文件损坏, 一切数据库中应仍正常工作。 但是, 可能会看到混乱文本而不是任何锁冲突邮件中的用户名称。

文件所在文件夹要有一定的权限

记得要给予 .LDB 文件所在的文件夹一定的权限。

如果你准备共享一个数据库,该 .MDB文件应该被放置在一个用户拥有读取、写入、建立、删除权限的目录中(NTSF格式)。即使你要求每个用户有不同的文件权限(比如,只读或者可读写),所有能够共享该数据的用户对该目录都应该拥有读取、写入、建立的权限,但是你可以分配用户对某个 .MDB文件只拥有只读权限。

注意:如果用独占方式打开某个数据库,那么 MS JET DB将不会建立 .LDB 文件,此时用户对目录的权限只要求有读取和写入两个权限即可。

如果.ldb或.laccdb文件损坏

注意:上述关于.LDB文件的信息与数据库文件无关。如果一个 .LDB文件损坏,数据库文件仍然能够工作正常。但是写入冲突的提示消息中<security name>这个部分你可能会看见一串不知所云的文字。

三、读取.laccdb 或 .ldb文件的内容

1、读取ldb文件的内容

Sub ShowUserRosterMultipleUsers()
    Dim cn As New ADODB.Connection
    Dim cn2 As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim i, j As Long

    cn.Provider = "Microsoft.Jet.OLEDB.4.0"
    cn.Open "Data Source=c:\Northwind.mdb"

    cn2.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
    & "Data Source=c:\Northwind.mdb"

    ' The user roster is exposed as a provider-specific schema rowset
    ' in the Jet 4 OLE DB provider.  You have to use a GUID to
    ' reference the schema, as provider-specific schemas are not
    ' listed in ADO's type library for schema rowsets  (Translate By Tmtony)

    Set rs = cn.OpenSchema(adSchemaProviderSpecific, _
    , "{947bb102-5d43-11d1-bdbf-00c04fb92675}")

    'Output the list of all users in the current database.

    Debug.Print rs.Fields(0).Name, "", rs.Fields(1).Name, _
    "", rs.Fields(2).Name, rs.Fields(3).Name

    While Not rs.EOF
        Debug.Print rs.Fields(0), rs.Fields(1), _
        rs.Fields(2), rs.Fields(3)
        rs.MoveNext
    Wend

2、可以使用以下代码 来读取.laccdb 的内容

Sub TestOpenLaccdb()


'常数    值  描述
'ForReading  1   以只读方式打开文件。不能写这个文件。
'ForWriting  2   以写方式打开文件。如果存在同名的文件,那么它以前的内容将被覆盖。
'ForAppending    8   打开文件并从文件末尾开始写。
'Format 参数可以是下列设置中的任一种:
'
'常数    值  描述
'TristateUseDefault  -2  使用系统默认值打开文件。
'TristateTrue    -1  以 Unicode 方式打开文件。
'TristateFalse    0  以 ASCII 方式打开文件。
'小辣椒高效Office翻译

Dim stm As Object ' TextStream
Dim fso As Object 'FileSystemObject
Dim strLine As String, strChar As String, strArr() As String, nArr As Long, nArrMax As Long, nArrMin As Long
Dim strFilename As String, strMessage As String
strFilename = CurrentProject.FullName
strFilename = Left(strFilename, InStrRev(strFilename, ".")) & "laccdb"

Set fso = CreateObject("Scripting.FileSystemObject") ' New FileSystemObject
'ForReading 1
Set stm = fso.OpenTextFile(strFilename, 1, False, 0)  'open the file as a textstream using the filesystem object (add ref to Microsoft Scripting Runtime)

While Not stm.AtEndOfStream  'Read through the file one character at a time
    strChar = stm.Read(1)
    If Asc(strChar) > 13 And Asc(strChar) < 127 Then  'Filter out the nulls and other non printing characters
        strLine = strLine & strChar
    End If
Wend
strMessage = "Users Logged In: " & vbCrLf
'Debug.Print strLine
strArr = Split(strLine, "Admin", , vbTextCompare)  'Because everyone logs in as admin user split using the string "Admin"
nArrMax = UBound(strArr)
nArrMin = LBound(strArr)
For nArr = nArrMin To nArrMax   'Loop through all machine numbers in lock file
    strArr(nArr) = Trim(strArr(nArr))  'Strip leading and trailing spaces
    If Len(strArr(nArr)) > 1 Then  'skip blank value at end
            'Because I log when a user opens the database with username and machine name I can look it up in the event log
        strMessage = strMessage & strArr(nArr) & vbCrLf
    End If
Next
MsgBox strMessage  'let the user know who is logged in
stm.Close
Set stm = Nothing
Set fso = Nothing

End Sub


四、如果异常退出Access , .ldb 或.laccdb无法删除处理办法

使用cmd 命令行先执行:net stop w3svc 回车

停止此服务后,再删除 .ldb 或.laccdb 文件

然后再使用命令:net stop w3svc ,开启服务器即可


本文链接:https://hqyman.cn/post/6774.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

您的IP地址是: