2014-12-03 5 views
0

Мое приложение создает бесплатные таблицы foxpro и вставляет в них данные. Я получаю синтаксическую ошибку при вставке строки, в которой есть двойные кавычки. вот строка, которая вызывает проблему - «ХВОСТНЫЕ ЛАМПЫ - ВЫСОТА МЕЖДУ 15» И 72 «». Я попытался избежать двойных кавычек с /, одинарной кавычкой, двойной цитатой, но ничего не помогло. Есть ли другой способ исправить эту проблему? любая помощь очень ценится. спасибо.visual foxpro escape double quote

Это моя вставка заявление

INSERT INTO NAMEMAIN (ACCIDENT,CHARGE,YEARSTAMP,ZIP,ZONE) VALUES ("1", "TAIL LAMPS-HEIGHT BETWEEN 15\" AND 72\"", 0, " ", "OVPK") 

ответ

2

Было бы лучше, чтобы увидеть оператор вставки вы пытаетесь сделать. Вставка должна быть от переменных ссылок, а не от жестких строк.

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 не выполняет экранирование символов, но я изменил просто используя квадратные скобки вокруг вставки шнура.

ВСТАВИТЬ В НОМЕР (НЕСЧАСТНАЯ, ЗАРЯДКА, ГОДА, ЗНАЧЕНИЕ, ЗОНА) ЗНАЧЕНИЯ («1», [ХВОСТАЛЬНЫЕ ЛАМПЫ-ВЫСОТА МЕЖДУ 15 »И 72»], 0 , "", "ОВПК")

+0

благодарит за ответ. Я добавил инструкцию insert к моему вопросу выше. – user678229

+0

@ user678229, обновленный ответ, и вы должны быть хорошо с [] квадратными скобками по мере того, как я настраивал. – DRapp

+0

спасибо. добавив квадратные скобки, они решили это. – user678229

0

А что, если у вас есть все 3 вида разделителей в тексте? В этом случае вы можете использовать

lcSomePart = [TAIL [LAMPS-HEIGHT] + ']' + [ BETWEEN "15" and '72'] 

что приводит к lcSomePart становится

TAIL [LAMPS-HEIGHT] BETWEEN "15" and '72' 

я выполняю FoxPro запросов от C++ и моя 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; 
}