Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка при выполнении очень длинного SQL запроса / 25 сообщений из 55, страница 1 из 3
22.12.2021, 15:28
    #40122162
skipper_prog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
БД FireBird.
Имеется запрос примерно ~12000 символов (прошу длину запроса на обсуждение не выносить, он такой есть, сильно ужаться не может).
Из IBExpert выполняется без проблем.
При выполнении из Delphi компонент TpFIBDataSet, вылазит следующая ошибка "Unexpected end of command - line 1, column 10814".
Насколько я понял компоненты Delphi при отправке запроса в Firebird нарезает его на пакеты, соответственно часть идет в одном пакете, часть в другом. Но видимо Firebird начинает его парсить и выполнять не дождавшись оставшихся пакета(ов).

Не значительно укоротив данный запрос, выполняется без проблем.
В поле TpFIBDataSet.SelectSQL - хранится весь запрос (проверял).
Обсуждений данной темы на форуме не нашел, параметры у DataSet, транзакции и БД покурил, ничего похожего что может быть связанно с моей проблемой не нашел.

Может кто то сталкивался с данной проблемой?
...
Рейтинг: 0 / 0
22.12.2021, 15:31
    #40122165
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
чарсет коннекта какой?
версия сервера и клиента какая?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.12.2021, 15:49
    #40122177
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
skipper_progИмеется запрос примерно ~12000 символов

Судя по ошибке больше похоже на ~75000 байт. И если это не создание ХП, то
ужаться он не только "может", но и должен за счёт использования параметров
вместо литералов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.12.2021, 16:12
    #40122192
skipper_prog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
Мимопроходящий,

Строка подключения стандартная, несколько параметров изменено.

Версия сервера 3. (у клиента я так понимаю тоже самое).
...
Рейтинг: 0 / 0
22.12.2021, 16:16
    #40122193
skipper_prog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
Dimitry Sibiryakov,
Использую параметры.
Сначала все было хорошо, а у одного клиента вылезла ошибка.
Один параметр используется в 10 местах, и вместо него подставляется строка (ну вот у одного она оказалась длиннее чем у остальных, соответственно и вылезла за предел).

А что это 75000?
Когда я про символы писал, имелось ввиду, что вылезаю за пределы размера пакетов в байтах.
...
Рейтинг: 0 / 0
22.12.2021, 16:25
    #40122200
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
skipper_prog
Строка подключения стандартная, несколько параметров изменено.
я тебя спросил про чарсет.
а ты мне картинки рисуешь.
не по теме.

зы: про пакеты смешно было, да.
...
Рейтинг: 0 / 0
22.12.2021, 16:30
    #40122205
skipper_prog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
Мимопроходящий,
единственный закрытый параметр оказался CHARSET = WIN1251

Мимопроходящийзы: про пакеты смешно было, да.
Когда не знаешь в чем дело, все за правду кажется.
Это все что смог накопать на просторах инета.
...
Рейтинг: 0 / 0
22.12.2021, 16:38
    #40122208
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
"есть мнение, и не только моё..." ©
что ты используешь не параметры, а чисто ФИБ+ хрень, под названием "макросы".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.12.2021, 16:43
    #40122211
peter64
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
skipper_prog

Один параметр используется в 10 местах, и вместо него подставляется строка (ну вот у одного она оказалась длиннее чем у остальных, соответственно и вылезла за предел).

и строка вида
where .... что-то in (.............................) ?
...
Рейтинг: 0 / 0
22.12.2021, 16:46
    #40122213
skipper_prog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
Мимопроходящий

"есть мнение, и не только моё..." ©
что ты используешь не параметры, а чисто ФИБ+ хрень, под названием "макросы".


Скорее всего в данном случае ФИБ+ Хрень. Пишу @PARAM.
Могу попробовать переписать на :PARAM - если это будут именно параметры.

Но есть еще один более длинный запрос, который без параметров, с ним тогда как быть?
...
Рейтинг: 0 / 0
22.12.2021, 16:47
    #40122214
skipper_prog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
peter64
skipper_prog

Один параметр используется в 10 местах, и вместо него подставляется строка (ну вот у одного она оказалась длиннее чем у остальных, соответственно и вылезла за предел).

и строка вида
where .... что-то in (.............................) ?


Верно.
...
Рейтинг: 0 / 0
22.12.2021, 16:58
    #40122217
peter64
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
skipper_prog,
1. попробуй GTT
2. http://www.ibase.ru/ibfaq/#inparam
...
Рейтинг: 0 / 0
22.12.2021, 17:06
    #40122220
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
skipper_prog
Один параметр используется в 10 местах, и вместо него подставляется строка (ну вот у одного она оказалась длиннее чем у остальных, соответственно и вылезла за предел).
Размер данных параметров никоем образом не влияет на текст и соответственно размер запроса.
...
Рейтинг: 0 / 0
22.12.2021, 17:08
    #40122222
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
YuRock
Размер данных параметров никоем образом не влияет на текст и соответственно размер запроса.
у него не параметры.
вот за подобную (и не только) хрень, я и не люблю плюсЫ.
...
Рейтинг: 0 / 0
22.12.2021, 17:12
    #40122224
skipper_prog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
peter64
skipper_prog,
1. попробуй GTT
2. http://www.ibase.ru/ibfaq/#inparam


Спасибо за наведения на мысли.

1. GTT - это генератор? Не понял как в мое случае использовать.
2. Пока проверил в IBexpert, работает только для для in < 4, далее ничего не выводит(позже попробую в Delphi).
...
Рейтинг: 0 / 0
22.12.2021, 17:16
    #40122227
peter64
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
skipper_prog,
1.Global Temporary Tables
2. раньше у in ограничение стояло в 1024.
если работает только для для in < 4 , ищи ошибку у себя.
без куска запроса тяжело гадать
...
Рейтинг: 0 / 0
22.12.2021, 17:20
    #40122232
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
peter64
раньше у in ограничение стояло в 1024.
Я в тройке 1-й раз в жизни нарвался. 1500 (на 1501 упало).
Пришлось переделать по-нормальному :)
...
Рейтинг: 0 / 0
22.12.2021, 17:23
    #40122235
skipper_prog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
peter64
skipper_prog,
1.Global Temporary Tables
2. раньше у in ограничение стояло в 1024.
если работает только для для in < 4 , ищи ошибку у себя.
без куска запроса тяжело гадать


1. Как вариант можно рассмотреть, но не очень бы хотелось, тк сам запрос достаточно быстро выполняется;
2. Сделал тестовый запрос к одной таблице, ID - int. Может это IBexpert, что то не так делает.
(~1~2~3~) - так работает.
(~1~2~3~4~) - так уже не работает. (все значения есть, хотя и без них должно работать)
...
Рейтинг: 0 / 0
22.12.2021, 17:27
    #40122238
peter64
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
YuRock,
хотя если у ТС-а Unexpected end of command и он подставляет строку,
скорее всего в строке есть апостроф , или другой левый символ.
Думаю, просто неправильно формирует подстановочную строку.
...
Рейтинг: 0 / 0
22.12.2021, 17:28
    #40122239
peter64
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
skipper_prog,
ошибка та же?
...
Рейтинг: 0 / 0
22.12.2021, 17:41
    #40122248
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
skipper_progА что это 75000?

При использовании старого API можно передать длину запроса (а можно и не
передавать), но параметр для этого - 16-ти разрядный и если запрос длиннее -
возникает переполнение и на сервер уходит усечённый запрос, что обычно и
приводит к описанной ошибке с номером символа за вычетом 65536.
65536 + 10814 ~ 75000.

Про "пакеты" - это звон из района MySQL, но там другая ошибка, просто соединение
рвётся как будто сервер упал.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.12.2021, 17:48
    #40122253
skipper_prog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
peter64
skipper_prog,
ошибка та же?


Подстановочная строка формируется правильно, взял уже значение из самого параметра.
Натолкнули меня на мысль.
Проверил, вставил "In" в данный запрос руками и скормил DataSet (без использования параметров), запрос отработал.

Предполагаю, может сам параметр обрезается при подстановке в запрос. Как проверить сформированный запрос который улетает, я не знаю как.
...
Рейтинг: 0 / 0
22.12.2021, 17:50
    #40122255
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
тро-ло-ло.

100500%
...
Рейтинг: 0 / 0
22.12.2021, 17:56
    #40122257
peter64
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
skipper_prog,
1. Поставить точку останова.
Посмотреть в дебаггере.

2. Перед выполнением запроса записать его в файл.
Файл открыть, скопировать содержимое.
Выполнить в IBExpert.
Profit.
...
Рейтинг: 0 / 0
22.12.2021, 17:57
    #40122259
skipper_prog
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выполнении очень длинного SQL запроса
Мимопроходящий
тро-ло-ло.

100500%


длина строки в параметре получается 155 символов.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка при выполнении очень длинного SQL запроса / 25 сообщений из 55, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]