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



我的Excel(ODBC/Access(有问题。我想刷新计算机中任何文件夹中的数据。我有一个文件,我在桌面上使用,但我想刷新同一文件中的数据,当它将被移动到文档等时。请你提供我应该做什么吗?

我有一个如下的文件连接:

DSN=Excel Files;DBQ=C:UsersUserDesktopTask1SalesBudget2018.xlsx;DefaultDir=C:UsersUserDesktopTask1;DriverId=1046;MaxBufferSize=2048;PageTimeout=5;

谢谢。

第1版:谢谢。我尝试使用您的解决方案,但我收到错误:";运行时错误2147467259数据库或对象是只读的";,下面是我的代码。该错误与"有关;。打开";行:

Sub RefreshData()
Dim CreateNew As Object
Dim RunSELECT As Object
Dim Data As String
Dim SQL As String
FolderPath = ActiveWorkbook.path
Path = Left(FolderPath, InStrRev(FolderPath, "") - 1)
Set CreateNew = CreateObject("ADODB.Connection")
With CreateNew
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source=" & Path & "SalesBudget2018.xlsx" & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=YES;"";"
.Open
End With
'Run SQL
SQL = "SELECT * FROM [twRynki$]"
Set RunSELECT = cn.Execute(SQL)
Do
output = output & RunSELECT(0) & ";" & RunSELECT(1) & ";" & RunSELECT(2) & vbNewLine
Debug.Print RunSELECT(0); ";" & RunSELECT(1) & ";" & RunSELECT(2)
rs.Movenext
Loop Until rs.EOF

End Sub

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

\数据\ mydb.mdb

所以,上面将是一个从当前位置调用数据的文件夹。使用相对文件夹的一个文件夹是:

\数据\ mydb.mdb

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

ActiveWorkbook.Path

所以上面会给你当前的路径。因此,您可以在代码中使用它来设置连接字符串。那么,即使在访问中,如果我们想让软件在任何文件夹中工作?我们只需在启动时获取完整的路径名。因此,该软件可以在任何文件夹中工作,并且您可以有效地获得您"的相对地址;不在乎"软件所在的位置,因为无论如何你都会得到/获取完整的路径名。所以,使用上面的内容,您可以附加一个名为data的文件夹名称

ActiveWorkbook.Path & "DataMydb.accdb"

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

以上内容适用于Excel VBA。要从Access VBA获取当前路径?你可以使用这个:

currentproject.Path

所以,你到Excel的连接字符串可能是这样的:

dim strExcelPath   as string
strExcelPath = CurrentProject.Path & "Task1SalesBudget2018.xlsx"

不清楚访问应用程序是否与任务1在同一文件夹中?假设是,那么这将起作用:

strExcelPath = CurrentProject.Path & "SalesBudget2018.xlsx"

所以,现在文件夹可以放在桌面上了,我的文件也就没关系了。因此,您可以将以上内容用作连接字符串的一部分。目前还不清楚是链接到Excel(链接表(,还是使用VBA并说ADO代码。然而,这其实并不重要。在应用程序启动时,您会得到上面的连接字符串,并对照链接表进行检查——如果相同,则不执行任何操作。如果不同,则重新链接该表。因此,如果文件夹被移动,您只能重新链接一次。不管你把文件夹移到哪里?只要你假设Excel工作表与访问应用程序在同一个文件夹中,那么你就可以使用了。如前所述,您可以在上面添加一个子文件夹,比如ExcelSheets。再说一次,无论你用Access部分将这个文件夹移到哪里,只要子文件夹在同一目录/文件夹中,这都会起作用——尽管你没有相对寻址。

最新更新