视觉foxpro逃脱双引号

时间:2014-12-03 15:55:22

标签: visual-foxpro

我的应用程序创建了免费的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")

2 个答案:

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