在Access并置代码中替换双引号

时间:2017-01-26 16:04:36

标签: sql vba ms-access

我在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,但无法使其工作。

2 个答案:

答案 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;