我有一个包含以下查询的 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()函数 - 在谷歌中搜索关键字"Jet Sql 替换函数"会给出很多参考,其中包含具有相同根本原因的各种问题,但我还没有找到一个像样的解决方案......
) 函数不是 SQL 的一部分(驻留在 VBA 中。字符串库),因此无法在 MS Access 之外调用。
因此,您可以使用任何SQL函数,但不能使用"外部"函数。
值得一提的是,此处提供的 Access 数据库引擎 2010(又名"ACE","Jet"的后继者)支持 Replace()
函数。若要验证我是否在 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:UsersPublic2003test.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:__tmprepl.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:UsersPublic2003test.mdb;"
。我得到了
C:__tmp>cscript /nologo repl.vbs
Everybody loves bacon!
可能值得尝试安装ACE引擎/驱动程序,看看是否有帮助。