我在Access数据库中使用Allen Browne's concatenation code。它运行良好,除了我的一些主键包含一个双引号的事实。这个双引号会抛出传递给过程的SQL字符串,并且在包含引号的行上得到 Access Error 3075 (缺少运算符)。以下是输出的示例:
route cables
1769 P006, P007
1769 P008, P009
4" DRILL [blank]
错误发生在4"钻头线。
我的VBA与艾伦的相同。我的SQL:
SELECT tblVia_Routing.[route],
ConcatRelated("[cable]","tblVia_Routing","[route] = """ & [route] & """") AS cables
FROM tblVia_Routing;
关于如何逃避用于表示英寸的双引号的任何建议?我在SQL中尝试过REPLACE,但无法使其工作。
答案 0 :(得分:0)
我认为你可以尝试这个SQL:
SELECT tblVia_Routing.[route],
replace(ConcatRelated("[cable]","tblVia_Routing","[route] = """ & [route] & """"),"""","""""") as cables
FROM tblVia_Routing;
您可以用双引号替换双引号,因为在Access中您可以通过复制来转义它们。
答案 1 :(得分:0)
Access有两个符号可用于表示字符串值,单引号字符'
Chr(39)
和双引号字符"
Chr(34)
。
如果您的值仅包含'
,则可以将其与"
括起来,类似地,如果您的值仅包含"
,则可以将其与'
括起来。
如果您的值可能包含'
,"
或两者,则必须在SQL字符串中转义其中一些,并使用符号转义进行包装。
在Access SQL中转义(单引号或双引号)引用非常简单,它只是将它加倍。
因此,使用以下SQL应该可以使嵌入式"
加倍:
SELECT tblVia_Routing.[route],
ConcatRelated("[cable]","tblVia_Routing","[route] = """ & Replace([route], """","""""") & """") AS cables
FROM tblVia_Routing;
或使用单引号更好:
SELECT tblVia_Routing.[route],
ConcatRelated("[cable]","tblVia_Routing","[route] = '" & Replace([route], "'","''") & "'") AS cables
FROM tblVia_Routing;