【发布时间】:2012-07-10 14:57:49
【问题描述】:
我只是在测试我的数据库,我意识到当我的数据库中的文本条目包含' 字符(单引号)时,我会遇到问题。我现在的解决方案是,在对字符串进行任何 .execute 操作之前,我调用escape(string, "'", " "'" ")。
下面总结的例子:
qr = "INSERT INTO tblExample VALUES ( " & "'" & me.testparam & "'" & ");"
qr = Replace(qr, "'", " "'" ")
db.execute qr
'also tried qr = "INSERT INTO tblExample VALUES ( " & "'" & replace(me.testparam,"'"," ") & "'" & ");"
我认为这是防止Tourette's 等值出错的正确解决方法。
这有两个问题。首先,它不起作用。其次,我在整个应用程序中的代码中有 50 多个位置,我在其中调用语句 db.execute qr,其中 qr 是一个可能包含单引号的字符串。我需要表中的字段包含单引号,所以我不能只用空格或类似的东西替换它。
两部分问题:
有没有比在每个要作为查询执行的字符串上调用
Replace的所有代码更好的解决方案?为什么我当前的实现失败了? - 即使将单引号转义为空格,我仍然在查询表达式中遇到语法错误。
【问题讨论】:
-
你试过用''(两个单引号)替换每个''吗?不确定访问,但这就是我通常在 SQL 中转义 ' 的方式。
-
好吧,它正在将单引号转义到一个空格中,但插入仍然不起作用。没有错误……但没有数据。之前的字符串:“插入 tblTest 值('tourette's');”和之后:“插入 tblTest Values('Tourette s');”
-
"Insert into tblTest Values('tourette''s');"是 @Tim 试图表明的 - 注意两个单引号 -
你的意思是“INSERT INTO tblTest Values (" & "'" & replace(me.field,"'","''") & "'" & ");" ?我会试试的。编辑 - 引用非常难以阅读,但你明白了。调用替换单引号作为第一个参数,两个单引号(不是双引号?)作为第二个?
-
@Scott 是的 - 你可以通过加倍来逃避单引号。