1

我有一个 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”会给出很多具有相同根本原因的各种问题的参考,但是我还没有找到合适的解决方案...

4

2 回答 2

4

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

因此,您可以使用任何 SQL 函数,但不能使用“外部”函数。

于 2013-10-28T08:00:18.787 回答
2

值得一提的是,Access Database Engine 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:\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行更改为来测试 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 引擎/驱动程序,看看是否有帮助。

于 2013-10-29T09:22:05.623 回答