Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 断开指向引用数据库的链接_Ms Access_Vba_Ms Access 2010 - Fatal编程技术网

Ms access 断开指向引用数据库的链接

Ms access 断开指向引用数据库的链接,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我正在使用两个Access 2010数据库。一个保存在我们公司的文件服务器上,另一个保存在本地的多台PC上。我想将我的VBA代码存储在网络数据库中,并将该文件用作本地副本的参考库。但是,通过该配置,只要本地副本处于打开状态,网络文件就会被锁定以进行编辑。使用VBA,是否可以在不关闭本地文件的情况下断开两个文件之间的链接 为了找到解决方法,我设置了一个测试环境,如下所示: 在C:\DB Test\ 本地数据库accdb 网络数据库accdb 将模块LocalCode添加到localdb.acc

我正在使用两个Access 2010数据库。一个保存在我们公司的文件服务器上,另一个保存在本地的多台PC上。我想将我的VBA代码存储在网络数据库中,并将该文件用作本地副本的参考库。但是,通过该配置,只要本地副本处于打开状态,网络文件就会被锁定以进行编辑。使用VBA,是否可以在不关闭本地文件的情况下断开两个文件之间的链接

为了找到解决方法,我设置了一个测试环境,如下所示:

  • C:\DB Test\
    • 本地数据库accdb
    • 网络数据库accdb
  • 将模块LocalCode添加到localdb.accdb
  • 将模块RemoteCode添加到网络数据库。accdb
  • 在本地数据库accdb中添加了对Microsoft Visual Basic for Applications Extensibility 5.3的引用
  • 本地DB.accdb中添加了对C:\DB Test\Network DB.accdb的引用
    • 此参考将网络DB添加到我的VBA编辑器的项目列表中,就好像文件已打开一样
  • 将以下过程添加到Local DB.accdb中的LocalCode模块中
  • 公共子ClearDBReference()
    作为字符串的Dim DBFile
    作为VBIDE.VBProject的Dim项目
    尺寸参考作为访问参考
    DBFile=“C:\DB Test\Network DB.accdb”
    对于应用程序中的每个引用。引用
    如果Ref.FullPath=DBFile,则
    '已成功删除库
    '对网络数据库的引用
    Application.References.Remove Ref
    退出
    如果结束
    下一个
    对于Application.VBE.VBProjects中的每个项目
    如果Proj.FileName=DBFile,则
    '运行时错误'440':方法'Remove'
    对象“”的“”失败
    Application.VBE.VBProjects.Remove Proj
    如果结束
    下一个
    Set Ref=无
    设置项目=无
    端接头
    

    当我执行
    ClearDBReference
    时,它成功地删除了对C:\DB Test\Network DB.accdb的库引用,但无法删除Network DB的项目。这两个文件之间好像有一个重影链接,但我不确定是什么原因造成的,或者下一步要尝试什么。

    是否有任何原因导致两个数据库都不能位于服务器上


    一个稍有不同的场景,但我们总是将前端和后端放在带有accdb的服务器上——这样就不会出现网络退出的问题。还可以提高性能并消除在本地PC上备份文件的需要。

    我不完全确定我是否理解您的情况,但听起来您只是指前端(FE)应用程序/数据库

    如果是这样,您可以为本地机器创建一个存根应用程序,每次运行时只将FE复制到用户的机器上,打开真正的FE应用程序,然后存根应用程序关闭

    这样,服务器上的“主机”就永远不会被锁定。当然,您不会修改这个文件,而是处理一个dev副本,然后替换服务器上的主文件


    另外,“主文件”应该是accde文件。

    谢谢您提出的格式良好的好问题。欢迎来到堆栈溢出!取消选中“文件>>选项>>当前数据库可能?”下的“打开独占”选项@enderland感谢您的夸奖。很荣幸。@ckuhn203我在“文件>>选项>>当前数据库”下没有看到“打开独占”选项。如果先删除VBA项目引用,会发生什么情况?不幸的是,您的建议无法解决根本问题。如果有人打开前端文件,它仍将被锁定以进行编辑。而且,在做出任何改变之前,它必须关闭。我想要的是一种在本地/网络数据库之间切换链接的方法。你提出了一个非常有创意的想法。不幸的是,这个问题的项目被搁置,我目前无法执行任何进一步的测试。当我们重新开始这个项目时,我会确保我能把它做好。