invalid request BLR error

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

zozuliar
новенький
Сообщения: 35
Зарегистрирован: 09.02.2014 21:56:58

invalid request BLR error

Сообщение zozuliar »

При попытке выполнить код

Код: Выделить всё

execute block(PROJECT_ID int = :PROJECT_ID, izm int = :izm)
      as
      declare variable prj integer;
      begin
      prj = -9999999;
      select projectid from projects p where p.projectid = :PROJECT_ID
        and p.izm <= :izm into prj;
      delete from partycipiants where projectid = :PRJ;
      delete from PROJECT_CONSTRUCTIONTYPE where projectid = :PRJ;
      delete from PROJECT_BUILDINGTYPE where projectid = :PRJ;
      update projects set nomer=projectid+3000000 where nomer is NULL         and projectid is not null;
end;

при помощи команды

Код: Выделить всё

TSQLQuery1.ExecSQL;

получаю ошибку
invalid request BLR at offset 70

А при попытке выполнить этот же SQL-код в IBEpert'е - всё хорошо.
Что такое вообще этот "BLR"?
В первой строке у меня вообще нет 70-го символа. Где ошибка?
Lazarus 1.0.14
FPC 2.6.2
Win 7 32-bit
FireBird 2.1
Аватара пользователя
ZeUsM
новенький
Сообщения: 57
Зарегистрирован: 08.11.2010 12:55:35
Откуда: Нерезиновая

Сообщение ZeUsM »

Код: Выделить всё

Что такое вообще этот "BLR"?

Насколько я понял из гугла - это ответ сервера FB.
Я например не очень уверен, что передача запроса через компонент и скажем редактор запросов (или чем вы там пользуетесь) будет одинаковой.
zozuliar
новенький
Сообщения: 35
Зарегистрирован: 09.02.2014 21:56:58

Сообщение zozuliar »

Вот потому я и спрашиваю, что не понимаю. в чём различия.
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

zozuliar писал(а):end;


Не лишняя ли там ';'?
Аватара пользователя
Максим
энтузиаст
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Сообщение Максим »

zozuliar писал(а):получаю ошибку
invalid request BLR at offset 70


Это весь текст ошибки? С трудом верится.
zozuliar
новенький
Сообщения: 35
Зарегистрирован: 09.02.2014 21:56:58

Сообщение zozuliar »

Вот ошибка.
В настройках компонента указаны оба параметра: PROJECT_ID и izm.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
ZeUsM
новенький
Сообщения: 57
Зарегистрирован: 08.11.2010 12:55:35
Откуда: Нерезиновая

Сообщение ZeUsM »

А компонент - то какой используется?
zozuliar
новенький
Сообщения: 35
Зарегистрирован: 09.02.2014 21:56:58

Сообщение zozuliar »

TSQLQuery
Аватара пользователя
*Rik*
постоялец
Сообщения: 453
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал
Контактная информация:

Сообщение *Rik* »

zozuliar писал(а):Вот ошибка.
В настройках компонента указаны оба параметра: PROJECT_ID и izm.

Там же написано:
bad parameter number

За одним проверьте, соответствует ли версия клиентской библиотеки, версии сервера.
Возможно компонент не может переварить параметры, попробуйте поиграть с опцией parametrCheck, в крайнем случае, попробуйте сформировать запрос динамически чтобы вместо параметров были готовые значения..
Последний раз редактировалось *Rik* 27.02.2014 18:09:18, всего редактировалось 1 раз.
zozuliar
новенький
Сообщения: 35
Зарегистрирован: 09.02.2014 21:56:58

Сообщение zozuliar »

версия соответствует.
Параметров было и 2 (PROJECT_ID и izm) и 3 (PROJECT_ID, izm и prj) Ошибка всё равно выскакивает
Аватара пользователя
Максим
энтузиаст
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Сообщение Максим »

Ну тогда тестовый проект в студию.
Аватара пользователя
*Rik*
постоялец
Сообщения: 453
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал
Контактная информация:

Сообщение *Rik* »

zozuliar писал(а):версия соответствует.
Параметров было и 2 (PROJECT_ID и izm) и 3 (PROJECT_ID, izm и prj) Ошибка всё равно выскакивает

Если компоненты IBX, я понял где ошибка, попробую исправить
zozuliar
новенький
Сообщения: 35
Зарегистрирован: 09.02.2014 21:56:58

Сообщение zozuliar »

Ну тогда тестовый проект в студию.

Не знаю, как включить фаербёрд в тестовый проект. Нашел обходной путь. Просто положил на форму несколько компонентов TSQLQuery и командую им ExecSQL в рамках одной транзакции.


Компоненты не IBX, а обычные стандартные компоненты доступа к данным.
Аватара пользователя
*Rik*
постоялец
Сообщения: 453
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал
Контактная информация:

Сообщение *Rik* »

Тестовый проект не поможет. Судя по IBX, у компонента в методе prepare происходит парсинг SQL запроса из которого извлекаются имена параметров, а на выходе получается вот такая конструкция:

Код: Выделить всё

execute block(PROJECT_ID int = ?, izm int = ?)
      as
      declare variable prj integer;
begin
      prj = -9999999;
      select projectid from projects p where p.projectid = ?
        and p.izm <= ? into prj;
      delete from partycipiants where projectid = ?;
      delete from PROJECT_CONSTRUCTIONTYPE where projectid = ?;
      delete from PROJECT_BUILDINGTYPE where projectid = ?;
      update projects set nomer=projectid+3000000 where nomer is NULL         and projectid is not null;
end;

Всё что после : извлекается как имя параметра и заменяется на ?. В выражении execute block, такая замена должна была пройти только в самой первой строке, куда передаются параметры, всё остальное должно было остаться в неизменном виде, но простенький парсер этого не понимает и калечит весь запрос.


Я добавил поддержку EXECUTE BLOCK в компонентах IBX собственной редакции, кроме этого ранее сделано:
Поддержка 2х транзакций в TIBDataSet по типу FIBPlus, одна транзакция для длинных - читающих запросов, вторая UpdateTransaction для коротких Update запросов (Refresh Row работает всегда через вторую Update Transaction, поэтому в параметрах транзакции нужно указать возможность чтения).
поддержка эмуляции Boolean полей
автотримирование строковых полей (property TIBDAtaset.AutoTrim)
поддержка выражений Returning и возвращаемых значений из Execute Procedure в TIBDataSet.InsertSQL и TIBDataSet.UpdateSQL.
добавлены property TIBDataSet.AutoCommit, TIBDataSet.AutoStartTransaction.
Убран старый баг в TIBStoredProc, который мог привести к искажению данных.

компоненты здесь: http://visual-t.ru/files/ibx.zip
Аватара пользователя
Максим
энтузиаст
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Сообщение Максим »

*Rik*
Это всё замечательно, но какое отношение имеют IBX к данной ветке?
Ответить