MS访问查询具有相对路径

时间:2016-04-26 18:47:07

标签: ms-access access-vba

我正在尝试设置一个访问数据库(Queries.accdb),该数据库将用于查询多个访问数据库作为表源。我能够通过硬编码来实现,但是当我尝试使用相对路径时,我遇到了语法错误。我希望能够移动Queries.accdb。

当前文件结构:

  • C:\ Temp \ PB \ 28 \ A.accdb
  • C:\ TEMP \ PB \ 28 \ B.accdb
  • C:\ Temp \ PB \ 28 \ Queries.accdb
  • C:\ TEMP \ PB \ 29 \ A.accdb
  • C:\ Temp \ PB \ 29 \ B.accdb
  • C:\ TEMP \ PB \ 29 \ Queries.accdb

当前工作查询:

SELECT * 
FROM  [;database=C:\Temp\PB\28\A.accdb].[Catalog] AS a 
INNER JOIN [;database=C:\Temp\PB\28\B.accdb].[Catalog] AS b 
ON a.componentid = b.externalid;

当我尝试不同的变体(。\〜\等)来删除DB文件前面的硬编码路径时,它会自动在Access中添加“默认数据库文件夹”设置。 (例如:“C:\”会将以下查询更改为“C:\ A.accdb”)

SELECT * 
FROM  [;database=A.accdb].[Catalog] AS a 
INNER JOIN [;database=B.accdb].[Catalog] AS b 
ON a.componentid = b.externalid;

我创建了一个VBA函数来返回完整的“from”括号(包括数据库文件)以及一个只返回路径的函数,但我无法弄清楚在from子句中使用VBA函数的正确语法。

"[;database=" + Application.CurrentProject.Path + "\A.accdb]"
"Application.CurrentProject.Path"

1 个答案:

答案 0 :(得分:1)

  

我无法弄清楚使用VBA函数的正确语法   来自条款。

那是因为你不能。在调用查询之前必须解析路径。

所以你必须在VBA中构建完成的SQL字符串,然后调用查询。

也就是说,只是链接当前操作所需的表格更简单,将它们分配为 CatalogA CatalogB

(重新)链接很容易在VBA中完成,并且可以让你完全免于篡改查询。