Компонент Delphi / Query - назначьте длинную строку (800 символов) свойству sql.text, обрезав значение sql до 326 символов - PullRequest
0 голосов
/ 11 февраля 2012

Я использую Delphi / NexusDB и строю SQL (длиной около 800 символов) во время выполнения, затем передаю его свойству nexusdb query.sql.text для выполнения, но обнаружил ошибку неверного токена при выполнении.

Я передаю SQL вот так

Query.SQL.Text := VarStrSQL; // <<---- string variable holding the SQL

при трассировке я обнаружил строку SQL в Query.SQL. Текст обрезан до 326 символов !! Хотя строковая переменная, содержащая SQL, является полной и корректной, но когда я назначаю эту переменную для query.sql.text, передается только 326 символов, и, конечно, это приводит к ошибке из-за неверного синтаксиса SQL

Посоветуйте, пожалуйста, почему обрезанная строка SQL?

Обновление: * Я попробовал memo1.lines.text: = VarStrSQL, и компонент memo также отображает обрезанную строку !! возможно ли, что символ в моей строке вызывает это !! ошибка в Delphi 2010, из-за которой TStrings обрезал мою строку? *

Спасибо

Ответы [ 2 ]

3 голосов
/ 11 февраля 2012

Звучит как ошибка в самом провайдере БД.В TQuery.

такого ограничения нет. Мой совет должен использовать небольшой SQL, но связанные параметры для установки данных.

Вместо

Query.SQL.Text := 'INSERT INTO Store_Information (store_name, Sales, Date)
VALUES ('Los Angeles ... ... ...', 900, '10-Jan-1999')';

код

Query.FieldByName('store').AsString := 'Los Angeles ... ... ...'; // here you should have no limitation
Query.FieldByName('sales').AsInteger := 900;
Query.FIeldByName('Date').AsDAteTime := Now;
Query.SQL.Text := 'INSERT INTO Store_Information (store_name, Sales, Date)
VALUES (:store,:sales,:date)';

И ваш запрос будет быстрее, поскольку оператор может быть подготовлен двигателем, а затем использован повторно.

0 голосов
/ 11 февраля 2012

Я нашел проблему: Поля nxtChar, когда они равны нулю, имеют значение # 0 и вызывают обрезку строки

однако, хотя я проверяю на null как этот varisnull (), поля char смогли пропустить эту функцию trap !!! что заставляет меня ходить вокруг себя часами, наконец, теперь я проверяю их вот так

If <nxtChar field> = #0 then <nxtChar field> = '' (or <nxtChar field> = null)
...