我的应用程序创建了免费的foxpro表并将数据插入其中。插入包含双引号的字符串时,我收到语法错误。 这是导致问题的字符串 - “尾灯LAMPS-HEIGHT BETWEEN 15”和72“”。我试过用/,单引号,双引号来逃避双引号,但没有任何帮助。 有没有其他方法可以解决这个问题? 任何帮助深表感谢。 感谢。
这是我的插入声明
INSERT INTO NAMEMAIN (ACCIDENT,CHARGE,YEARSTAMP,ZIP,ZONE) VALUES ("1", "TAIL LAMPS-HEIGHT BETWEEN 15\" AND 72\"", 0, " ", "OVPK")
答案 0 :(得分:3)
最好看到您尝试执行的insert语句。插入应该来自变量引用而不是硬字符串。
lcSomePart = Thisform.txtboxDescription.Value
insert into YourTable ( somePartField ) values ( lcSomePart )
它应该没有问题,但是,如果没有你的例子,很难确认你遇到了什么。
另一种方法是VFP允许多个选项来包装字符串,如果您引用了硬编码,例如
lcSomePart = [TAIL LAMPS-HEIGHT BETWEEN 15" and 72"]
lcSomePart = 'TAIL LAMPS-HEIGHT BETWEEN 15" and 72"'
以上两个版本都有效。 VFP使用方括号来标识字符串的开头/结尾(只要它们是配对的。还允许单引号作为字符串的开头/结尾。如果你有一个单引号的字符串,只需使用无论是正方形还是双引号都是以同样的方式。
将插入更改为以下内容,但强烈建议插入变量,尤其是来自数据输入字段,但请注意,VFP不会转义字符,但我更改为只使用字符串插入周围的方括号。
插入NAMEMAIN(事故,收费,YEARSTAMP,ZIP,ZONE)价值观(" 1",[尾灯亮度为15"和72"],0,&#34 ;"," OVPK")
答案 1 :(得分:1)
但是如果你的文本中有3种分隔符怎么办?在这种情况下,您可以使用
lcSomePart = [TAIL [LAMPS-HEIGHT] + ']' + [ BETWEEN "15" and '72']
导致lcSomePart变为
TAIL [LAMPS-HEIGHT] BETWEEN "15" and '72'
我从C ++执行FoxPro查询,我自己的字符串类中的FoxPro转义函数如下所示:
MyString& MyString::doSQLFPEscape() {
for (size_t i=0; i<this->iLen; i++) {
if (this->c_str()[i] == ']') {
this->doInsert("+']'+[", i+1);
i += 5;
}
}
this->doInsert("[").add("]");
return *this;
}