带有内联函数的MS Access查询无法公开

我有一个MS Access 2003数据库包含以下查询:

SELECT Replace(Trim(TABLE_A.Field_01), "XXX", "YYY") AS FLD01 FROM TABLE_A 

如果我从此Access数据库使用Excel执行“导入数据”,则找不到在数据库中定义的此查询的名称。

如果我通过删除修剪function来更改查询,那么我可以在Excel中看到查询。

 SELECT RTrim(LTrim(TABLE_A.Field_01)) AS FLD01 FROM TABLE_A 

有没有人有类似的经历? 我认为有什么样的function可以适用于MS Access查询的限制。

它看起来像MS Jet SQL,不支持Replace()函数的问题 – 在谷歌search关键词“Jet Sqlreplacefunction”提供了很多与相同的根本原因的各种问题的参考,但我还没有find一个体面的解决scheme呢…

Trim()函数不是SQL的一部分(驻留在VBA.Strings库中),因此不能在MS Access之外调用。

所以你可以使用任何SQL函数,但不能使用“external”。

值得一提的 ,Access数据库引擎2010(又名“ACE”,“Jet”的后继者Replace()支持Replace()函数。 要validation我在Access 2003数据库文件中创build了一个名为[SomeTable]的表:

 ID s -- ---------------------------- 1 Everybody loves tofu! 2 Nobody really liked Raymond. 

…我创build了一个名为[stockReplaceQuery]的保存查询:

 SELECT ID, Replace([s],"tofu","bacon") AS s1 FROM SomeTable; 

当我使用下面的VBScripttestingJet ODBC连接时

 Option Explicit Dim con, rst Set con = CreateObject("ADODB.Connection") con.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Users\Public\2003test.mdb;" Set rst = CreateObject("ADODB.Recordset") rst.Open "SELECT s1 FROM stockReplaceQuery WHERE ID = 1", con WScript.Echo rst(0).Value rst.Close Set rst = Nothing con.Close Set con = Nothing 

…我有

 C:\__tmp>cscript /nologo repl.vbs C:\__tmp\repl.vbs(6, 1) Microsoft OLE DB Provider for ODBC Drivers: [Microsoft][ODBC Microsoft Access Driver] Undefined function 'Replace' in expression. 

当我通过改变con.Open行来testing一个ACE ODBC连接

 con.Open "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\Public\2003test.mdb;" 

…我有

 C:\__tmp>cscript /nologo repl.vbs Everybody loves bacon! 

可能值得尝试安装ACE引擎/驱动程序,看看是否有帮助。