Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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 Access 2007 VBA:将Tabledef.Connect属性设置为无效路径_Ms Access_Ms Access 2007_Vba - Fatal编程技术网

Ms access Access 2007 VBA:将Tabledef.Connect属性设置为无效路径

Ms access Access 2007 VBA:将Tabledef.Connect属性设置为无效路径,ms-access,ms-access-2007,vba,Ms Access,Ms Access 2007,Vba,我被要求对Access 2007 VBA数据库进行一些维护 它已将表链接到同一文件夹中的另一个Access数据库。它具有指向该数据库的硬编码链接,因此如果用户将文件夹复制到新文件夹,它将尝试使用原始文件夹中的链接数据库。他们要求我消除在这种情况下使用错误链接数据库的危险 我添加了在数据库打开时运行的代码,以使其重置到数据库自己文件夹中的链接。如果链接数据库不存在或已重命名,则会提示用户浏览到正确的数据库。到目前为止还不错 但是如果用户取消该对话框,我不想让它连接到错误的数据库。我想将linked

我被要求对Access 2007 VBA数据库进行一些维护

它已将表链接到同一文件夹中的另一个Access数据库。它具有指向该数据库的硬编码链接,因此如果用户将文件夹复制到新文件夹,它将尝试使用原始文件夹中的链接数据库。他们要求我消除在这种情况下使用错误链接数据库的危险

我添加了在数据库打开时运行的代码,以使其重置到数据库自己文件夹中的链接。如果链接数据库不存在或已重命名,则会提示用户浏览到正确的数据库。到目前为止还不错

但是如果用户取消该对话框,我不想让它连接到错误的数据库。我想将linked tabledef的Connect属性设置为“正确”路径,即使该表不存在。然后,用户将得到一个错误,即链接表在复制到链接数据库之前不存在,而不是无意中使用了错误的数据库

当我使用Resume Next通过将Connect属性设置为不存在的数据库时引发的错误时,更改不会持续,使其连接到错误的数据库。所以现在,当发生这种情况时,我将关闭数据库(在警告用户无法找到链接的数据库之后)。就不使用错误的数据库而言,这是安全的,但我认为这不是理想的用户体验

那么--是否可以将Tabledef的Connect属性设置为不存在的数据库

谢谢

格雷格

是否可以将Tabledef的Connect属性设置为不存在的数据库

我不这么认为。我建议您首先删除所有链接表,然后如果没有要连接的数据库,则显示这样说的错误


为了重新链接这些表,您需要在前端文件中有一个本地表,其中包含要链接的所有表的列表。然后,每次需要重新链接表时,您都需要循环浏览该列表,假设链接已全部删除。

要更新表链接以使其无效,您需要

  • 创建后端数据库的临时副本(或者可能是带有空表的“骨架”后端数据库的临时副本)
  • 更新表链接以指向临时数据库,然后
  • 删除临时数据库
例如,如果我运行以下代码

选项比较数据库
选项显式
子MakeBadLink()
Const linkedTableName=“myLinkedTable”测试值
Dim cdb作为DAO.Database,tbd作为DAO.TableDef
Dim tempFolder作为字符串,linkedDb作为字符串,tempDb作为字符串
将fso设置为文件系统对象
设置cdb=CurrentDb
linkedDb=Mid(cdb.TableDefs(linkedTableName.Connect,11)“删除”数据库=“前缀
Set fso=新文件系统对象
tempFolder=fso.GetSpecialFolder(临时文件夹)&“\”
tempDb=tempFolder&fso.GetFileName(linkedDb)
fso.CopyFile链接数据库,tempDb,True
Set tbd=cdb.TableDefs(linkedTableName)
tbd.Connect=“;DATABASE=“&tempDb
待定。刷新链接
设置待定=无
设置cdb=无
fso.delete文件tempDb
设置fso=无
端接头
随后尝试使用[myLinkedTable]会导致错误

找不到文件'C:\Users\Gord\AppData\Local\Temp\myDb.accdb'


可以将链接数据库的路径存储在表中,并在打开数据库时检查它是否与currentproject.path相同。