Zeolibs: неизвестный столбец в предложении Where

Я пытаюсь выполнить SQL-запрос с помощью Zeolibs, но компилятор продолжает жаловаться на следующую ошибку: Неизвестный столбец в предложении Where.

ZQuery1.SQL.Text := 'SELECT * FROM new_table WHERE TagName = '+theSig.f.TagName;
ZQuery1.ExecSQL;

Но я проверил все столбцы в своей таблице базы данных, и это правильно, так как у меня есть здесь TagName.

Что не так с моим оператором SQL?


person ThN    schedule 16.01.2015    source источник
comment
Какое значение ZQuery1.SQL.Text после вашего назначения?   -  person jarlh    schedule 16.01.2015
comment
@jarlh 'SELECT * FROM new_table WHERE TagName = GB1'#$D#$A   -  person ThN    schedule 16.01.2015
comment
в том-то и проблема, что у вас одинарная кавычка в запросе??   -  person HaveNoDisplayName    schedule 16.01.2015
comment
Вы потеряли кавычки вокруг вашего значения. Прямо сейчас он ищет столбец с этим нечетным значением.   -  person jarlh    schedule 16.01.2015


Ответы (1)


Вам необходимо использовать функцию QuotedStr. Таким образом, ваш код будет

ZQuery1.SQL.Text := 'SELECT * FROM new_table WHERE TagName = '+QuotedStr(theSig.f.TagName);

Лучшей альтернативой является использование параметризованных запросов (это заблокирует попытки внедрения SQL - взгляните на этот вопрос).

ZQuery1.SQL.Text := 'SELECT * FROM new_table WHERE TagName = :myparam';
ZQuery1.ParamByName('myparam').AsString := theSig.f.TagName;
person RBA    schedule 16.01.2015
comment
Вы правы, мне, видимо, нужны двойные кавычки вокруг значения TagName. Я поиграл с оператором и заставил его работать. SELECT * FROM new_table WHERE TagName = " '+theSig.f.TagName+' " '; - person ThN; 16.01.2015
comment
Вместо множества квот лучше использовать параметризованные запросы. - person RBA; 16.01.2015