我有一个包含以下查询的MS Access 2003数据库:
SELECT Replace(Trim(TABLE_A.Field_01), "XXX", "YYY") AS FLD01 FROM TABLE_A
如果我从此Access数据库使用Excel执行“导入数据”,则无法找到数据库中定义的此查询的名称。
如果我通过删除Trim函数来更改查询,那么我可以在Excel中看到查询。
SELECT RTrim(LTrim(TABLE_A.Field_01)) AS FLD01 FROM TABLE_A
有没有人有类似的经历?我认为在MS Access中可以应用于查询的函数类型存在限制。
看起来MS Jet SQL存在问题,它不支持Replace()函数 - 在google中搜索关键词“Jet Sql Replace Function”会给出很多带有相同root的各种问题的引用原因,但我还没有找到一个像样的解决方案......
答案 0 :(得分:4)
Trim()函数不是SQL的一部分(驻留在VBA.Strings库中),因此无法在MS Access外部调用。
因此,您可以使用任何SQL函数,但不能使用“外部”。
答案 1 :(得分:2)
对于它的价值,Access数据库引擎2010(又名“ACE”,“Jet”的后继者)支持Replace()
函数 ,可用here 。验证我是否在Access 2003数据库文件中创建了名为[SomeTable]的表:
ID s
-- ----------------------------
1 Everybody loves tofu!
2 Nobody really liked Raymond.
...我创建了一个名为[stockReplaceQuery]的保存查询:
SELECT ID, Replace([s],"tofu","bacon") AS s1
FROM SomeTable;
当我使用以下VBScript
测试Jet 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
行更改为
con.Open "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\Public\2003test.mdb;"
......我得到了
C:\__tmp>cscript /nologo repl.vbs
Everybody loves bacon!
尝试安装ACE引擎/驱动程序并查看是否有帮助可能是值得的。