【问题标题】:Replacing double quotes within Access concatenation code替换 Access 连接代码中的双引号
【发布时间】:2018-05-14 16:37:37
【问题描述】:

我在我的 Access 数据库中使用 Allen Browne's concatenation code。它工作得很好,除了我的一些主键包含一个双引号。这个双引号会抛出传递给过程的 SQL 字符串,并且我在包含引号的行上得到 Access Error 3075 (missing operator)。以下是输出示例:

route              cables
1769               P006, P007
1769               P008, P009
4" DRILL           [blank]

错误发生在 4" DRILL 线上。

我的 VBA 和艾伦的一样。我的 SQL:

SELECT tblVia_Routing.[route], 
ConcatRelated("[cable]","tblVia_Routing","[route] = """ & [route] & """") AS cables
FROM tblVia_Routing;

关于如何转义用于表示英寸的双引号的任何建议?我在 SQL 中尝试了 REPLACE,但无法使其正常工作。

【问题讨论】:

  • 也许可以试试单引号ConcatRelated("[cable]","tblVia_Routing","[route] = '" & [route] & "'")
  • 这成功了!太棒了,谢谢。
  • 请注意,如果您的键中有一些单引号,您以后可能会遇到同样的问题。

标签: sql vba ms-access


【解决方案1】:

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;

【讨论】:

    【解决方案2】:

    我觉得你可以试试这个SQL:

    SELECT tblVia_Routing.[route],
    replace(ConcatRelated("[cable]","tblVia_Routing","[route] = """ & [route] & """"),"""","""""") as cables
    FROM tblVia_Routing;
    

    您可以将双引号替换为 2 个双引号,因为在 Access 中您可以通过重复对它们进行转义。

    【讨论】:

    • 似乎不起作用...它在查询中添加了一个额外的字段,默认为 Expr1001。 Expr1001 对除双引号外的所有值的值为 -1。我也收到相同的错误 3075。错误 3075 消息说它正在读取有问题的查询表达式为 '[route] = "4" DRILL"'
    • @Harry T 我已经更新了我的答案。我认为这应该可行:替换现在在整个 ConcatRelated 函数上完成
    猜你喜欢
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 2011-06-09
    相关资源
    最近更新 更多