Ms access 如何在切换后端源时以独占方式访问access 2007中的后端表

Ms access 如何在切换后端源时以独占方式访问access 2007中的后端表,ms-access,vba,ms-access-2007,Ms Access,Vba,Ms Access 2007,我有一个Access数据库,分为一个前端数据库和几个后端数据库(也是所有Access),有时我需要对后端Access文件中的VBA模块进行维护,以添加功能、修复错误等。不幸的是,按照访问的工作方式,我必须以独占方式访问后端表,以便实际保存任何更改。我设计了一种方法来强制关闭所有链接到后端的打开的前端访问文件,但我想让用户可以选择更改为后端文件的本地副本(自动同步到硬盘),而不是完全关闭它们。我已经使用该代码允许切换到数据库的本地副本,但由于某些原因,它不会释放后端文件以获得独占访问权限。除了需要

我有一个Access数据库,分为一个前端数据库和几个后端数据库(也是所有Access),有时我需要对后端Access文件中的VBA模块进行维护,以添加功能、修复错误等。不幸的是,按照访问的工作方式,我必须以独占方式访问后端表,以便实际保存任何更改。我设计了一种方法来强制关闭所有链接到后端的打开的前端访问文件,但我想让用户可以选择更改为后端文件的本地副本(自动同步到硬盘),而不是完全关闭它们。我已经使用该代码允许切换到数据库的本地副本,但由于某些原因,它不会释放后端文件以获得独占访问权限。除了需要关闭或刷新的表之外,前端和后端之间是否还有其他开放链接,以便获得对后端的独占权限,或者这只是我必须处理的访问难题

    BEDBFiles = Dir(DrivePath & "*.accdb") 'Get all BEDB files in local environment to update linked tables

    If BEDBFiles = "" Then GoTo SkipLocals 'No files found

    FNum = 0

    'Get all DB files
    Do While BEDBFiles <> ""
        FNum = FNum + 1
        ReDim Preserve FileArray(1 To FNum)
        FileArray(FNum) = BEDBFiles
        BEDBFiles = Dir()
    Loop

    For j = 1 To FNum
        DBug DrivePath & FileArray(j)
        Set BEDB = OpenDatabase(DrivePath & FileArray(j), , True)
        For Each BETDF In BEDB.TableDefs
            If Left(BETDF.Connect, 10) = ";DATABASE=" Then
                DBug "Old: " & BETDF.Connect
                Set BETDF = BEDB.TableDefs(BETDF.Name)
                If InStr(1, BETDF.Connect, "Common", vbTextCompare) = 0 Then 'Not in Common Tables BEDB
                    BETDF.Connect = ";DATABASE=" & DrivePath & Right(BETDF.Connect, 14) 'Captures same model DB
                Else
                    BETDF.Connect = ";DATABASE=" & DrivePath & "Common Tables.accdb"
                End If
                DBug "New: " & BETDF.Connect
                BETDF.RefreshLink
            End If
        Next BETDF
        BEDB.Close
        Set BEDB = Nothing
    Next j
获取本地环境中的所有BEDB文件以更新链接表 如果BEDBFiles=“”,则转到SkipLocals“未找到任何文件” FNum=0 '获取所有数据库文件 “边睡觉边做文件” FNum=FNum+1 ReDim保留文件数组(1到FNum) FileArray(FNum)=BEDBFiles BEDBFiles=Dir() 环 对于j=1到FNum DBug驱动路径和文件阵列(j) 设置BEDB=OpenDatabase(DrivePath&FileArray(j),True) 对于BEDB.TableDefs中的每个BETDF 如果左侧(BETDF.Connect,10)=“DATABASE=”则 DBug“Old:&BETDF.Connect Set BETDF=BEDB.TableDefs(BETDF.Name) 如果InStr(1,BETDF.Connect,“Common”,vbTextCompare)=0,则“不在公共表中” BETDF.Connect=“;DATABASE=“&DrivePath&Right(BETDF.Connect,14)”捕获相同型号的数据库 其他的 BETDF.Connect=“;DATABASE=“&DrivePath&”Common Tables.accdb” 如果结束 DBug“New:&BETDF.Connect 刷新链接 如果结束 下一个BETDF 贝德,关门 设置为B=无 下一个j
将访问权限拆分为前端/后端数据库的整个要点是从后端文件中删除所有查询、表单、报告和代码模块。后端文件应该是纯数据。如果您有不想包含在用户前端数据库中的敏感功能,则可以为此创建单独的“维护”前端,并将其连接到同一后端。您需要对后端进行独占访问的唯一原因是您正在对表进行结构更改。我没有想到这一点,但这很有意义。在后端表中运行的代码用于备份数据和自动滚动数据,并由自动脚本调用,但我非常确定,只要稍作修改,我应该能够将所有这些代码放入一个单独的Access文件中。