如何在SQL-ODBC中使用相对路径?

如何在SQL-ODBC中使用相对路径?,sql,excel,ms-access,odbc,Sql,Excel,Ms Access,Odbc,我对Excel(ODBC/Access)有问题。我想刷新计算机中任何文件夹中的数据。我有我从桌面使用的文件,但我想在移动到文档等时刷新同一文件中的数据。请您提供我应该做什么 我有一个文件连接,如下所示: DSN=Excel文件;DBQ=C:\Users\User\Desktop\Task1\SalesBudget2018.xlsx;DefaultDir=C:\Users\User\Desktop\Task1;DriverId=1046;MaxBufferSize=2048;PageTimeout

我对Excel(ODBC/Access)有问题。我想刷新计算机中任何文件夹中的数据。我有我从桌面使用的文件,但我想在移动到文档等时刷新同一文件中的数据。请您提供我应该做什么

我有一个文件连接,如下所示:

DSN=Excel文件;DBQ=C:\Users\User\Desktop\Task1\SalesBudget2018.xlsx;DefaultDir=C:\Users\User\Desktop\Task1;DriverId=1046;MaxBufferSize=2048;PageTimeout=5

多谢各位

伊迪丝1:谢谢。我尝试使用您的解决方案,但收到错误:“运行时错误2147467259数据库或对象为只读”,我的代码如下。该错误与“.Open”行有关:


你的路径实际上根本不是相对的。但ACE/JET数据引擎无论如何都不支持相对路径。 相对路径是

\数据\mydb.mdb

所以,上面是一个名为“来自当前位置的数据”的文件夹。使用relative的一个文件夹是:

..\Data\mydb.mdb

但是,对于ACE/Access,不支持相对路径。然而,当我们想让软件在当前文件夹中工作时,我们该怎么做?我们只需在应用程序启动时获取并使用完整路径名。因此,您可以获取/抓取当前文件夹。在Excel VBA中,您可以使用:

ActiveWorkbook.Path
currentproject.Path
因此,上面将为您提供当前路径。因此,您可以在代码中使用它来设置连接字符串。那么,即使在access中,我们是否希望软件在任何文件夹中工作?我们只需在启动时获取完整的路径名。因此,软件可以在任何文件夹中工作,并且您可以获得相对地址,因为您“不在乎”软件放置在哪里,因为您始终可以获得/获取完整的路径名。因此,使用上面的方法,您可以附加一个名为data的文件夹名

ActiveWorkbook.Path & "\Data\Mydb.accdb"
因此,从当前工作簿位置,您可以始终拥有一个名为data的文件夹,并且在该文件夹中可以拥有您的数据库。因此,实际上您确实获得了相对寻址,但是您总是按照上面所述提取当前工作簿的完整路径名。 最终的结果是,您不会错过没有某种形式的相对寻址,因为您不需要使用这种方法

以上内容适用于Excel VBA。要从Access VBA获取当前路径?您可以使用以下选项:

ActiveWorkbook.Path
currentproject.Path
因此,您与Excel的连接字符串可以是:

dim strExcelPath   as string
strExcelPath = CurrentProject.Path & "\Task1\SalesBudget2018.xlsx"
不清楚access应用程序是否与task1位于同一文件夹中? 假设是,那么这将起作用:

strExcelPath = CurrentProject.Path & "\SalesBudget2018.xlsx"

所以,现在文件夹可以放在桌面上了,我的文件-这没关系。因此,您可以将上述内容用作连接字符串的一部分。不清楚是链接到Excel(链接表),还是使用VBA和ADO代码。然而,这真的没关系。在应用程序启动时,获得上面的连接字符串,对照链接表检查它——如果相同,则什么也不做。如果不同,则重新链接该表。因此,如果文件夹已移动,则只需重新链接一次。不管你把文件夹移到哪里?只要您假定Excel工作表与access应用程序位于同一文件夹中,就可以继续。如前所述,您可以在上面添加一个子文件夹。再说一次,无论您将此文件夹和访问部件一起移动到何处,只要子文件夹位于同一目录/文件夹中,则此功能将正常工作-尽管您没有相对地址。

Hi,请检查我的“Edit1”是否有问题?您的解决方案有效,谢谢,但我收到了另一个错误,我不确定如何处理它。ActiveWorkbook.path没有尾随\,因此insterrev将返回0-删除路径名。