带有内联函数的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引擎/驱动程序,看看是否有帮助。