Страница 1 из 1

Надо ли экранировать двоеточие в SQL-выражении UPDATE?

СообщениеДобавлено: 19.11.2008 17:49:24
t-ea
В программе примерно следующий код
Код: Выделить всё
S:='update table1 (field1, field2) values (''Имя'', ;''Время - 12:45:00'')';
query.SQL[1]:=S;
query.ExecSQL;

Таким способом генерируется порядка 50000 строк (у них естественно разные значения полей), однако около 1000 строк не добавляется.

Надо ли как нибудь экранировать двоеточия в строке-выражении чтобы объяснить mse что никаких параметров в строке нет?

Re: Надо ли экранировать двоеточие в SQL-выражении UPDATE?

СообщениеДобавлено: 19.11.2008 18:11:50
Attid
t-ea
а почему не используешь параметры ?

экранировать не надо, возможно надо будет отключить автоматический prepare , название параметра не помню, поищи по созвуючию

Re: Надо ли экранировать двоеточие в SQL-выражении UPDATE?

СообщениеДобавлено: 19.11.2008 18:38:13
gotozero
prepare statement

Re: Надо ли экранировать двоеточие в SQL-выражении UPDATE?

СообщениеДобавлено: 19.11.2008 18:56:41
t-ea
А-а, издревле там запрос сам собирается…

Свойства prepare не нашёл, может ParseSQL?

А что я должен сделать с PrepareStatement?

Re: Надо ли экранировать двоеточие в SQL-выражении UPDATE?

СообщениеДобавлено: 19.11.2008 20:43:46
gotozero
t-ea писал(а):А-а, издревле там запрос сам собирается…

Свойства prepare не нашёл, может ParseSQL?

А что я должен сделать с PrepareStatement?


ну по идее ParseSQL по моему как раз то что нужно!
если его отключить поиск параметров не осуществляеться!

Только я не пойму причем тут параметры, насколько я понял у тебя идут вставки но не хватает 1000 строк!

Re: Надо ли экранировать двоеточие в SQL-выражении UPDATE?

СообщениеДобавлено: 19.11.2008 21:28:01
Attid
t-ea писал(а):А-а, издревле там запрос сам собирается…

МСЕ в древних временах еще не было =)

Re: Надо ли экранировать двоеточие в SQL-выражении UPDATE?

СообщениеДобавлено: 20.11.2008 15:49:14
debi12345
query.ParseSQL:= false.

Re: Надо ли экранировать двоеточие в SQL-выражении UPDATE?

СообщениеДобавлено: 21.11.2008 16:11:45
t-ea
В древних временах был Delphi3, компонент Table и сброс в текстовый файл.

Переключение ParseSQL не помогло, но это уже и неважно.

Строки не добавлялись из-за заглавной кириллической буквы «Ч».
В процедуре ParseSQL (модуль mseDB) при встрече в строке апострофа, срабатывала ветка содержащая код
Код: Выделить всё
while not (p^ in [#0, '''']) do begin

end;

FPC 2.2.0 при выполнении этой операции, если p^ была равна «Ч», считал что условие выполнено и выходил из цикла (младший байт «Ч» как раз апостроф). Естественно дальше строка обрабатывалась неправильно так как нарушался порядок следования апострофов.

Скачал FPC 2.2.2, установил, запустил программу, проверил на котрольной строке содержащей «Ч», вроде стало работать правильно.
Но теперь другая проблема — поля типа дата при присвоении их переменной типа msestring, помещают туда не строковое представление даты, а его числовое значение, т.е. вместо '01.01.1950' туда помещается '12345'.
Более подробно в отдельной теме http://freepascal.ru/forum/viewtopic.php?f=11&t=3866