invalid request BLR error

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

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

invalid request BLR error

Сообщение zozuliar » 26.02.2014 12:22:42

При попытке выполнить код
Код: Выделить всё
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
zozuliar
новенький
 
Сообщения: 35
Зарегистрирован: 09.02.2014 21:56:58

Re: invalid request BLR error

Сообщение ZeUsM » 26.02.2014 13:45:11

Код: Выделить всё
Что такое вообще этот "BLR"?

Насколько я понял из гугла - это ответ сервера FB.
Я например не очень уверен, что передача запроса через компонент и скажем редактор запросов (или чем вы там пользуетесь) будет одинаковой.
Аватара пользователя
ZeUsM
новенький
 
Сообщения: 57
Зарегистрирован: 08.11.2010 13:55:35
Откуда: Нерезиновая

Re: invalid request BLR error

Сообщение zozuliar » 26.02.2014 17:10:19

Вот потому я и спрашиваю, что не понимаю. в чём различия.
zozuliar
новенький
 
Сообщения: 35
Зарегистрирован: 09.02.2014 21:56:58

Re: invalid request BLR error

Сообщение svk12 » 26.02.2014 19:01:45

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


Не лишняя ли там ';'?
svk12
постоялец
 
Сообщения: 409
Зарегистрирован: 09.06.2008 18:42:47

Re: invalid request BLR error

Сообщение Максим » 26.02.2014 23:50:19

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


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

Re: invalid request BLR error

Сообщение zozuliar » 27.02.2014 11:18:35

Вот ошибка.
В настройках компонента указаны оба параметра: PROJECT_ID и izm.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
zozuliar
новенький
 
Сообщения: 35
Зарегистрирован: 09.02.2014 21:56:58

Re: invalid request BLR error

Сообщение ZeUsM » 27.02.2014 15:47:27

А компонент - то какой используется?
Аватара пользователя
ZeUsM
новенький
 
Сообщения: 57
Зарегистрирован: 08.11.2010 13:55:35
Откуда: Нерезиновая

Re: invalid request BLR error

Сообщение zozuliar » 27.02.2014 17:04:29

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

Re: invalid request BLR error

Сообщение *Rik* » 27.02.2014 17:43:25

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

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

За одним проверьте, соответствует ли версия клиентской библиотеки, версии сервера.
Возможно компонент не может переварить параметры, попробуйте поиграть с опцией parametrCheck, в крайнем случае, попробуйте сформировать запрос динамически чтобы вместо параметров были готовые значения..
Последний раз редактировалось *Rik* 27.02.2014 18:09:18, всего редактировалось 1 раз.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: invalid request BLR error

Сообщение zozuliar » 27.02.2014 18:06:25

версия соответствует.
Параметров было и 2 (PROJECT_ID и izm) и 3 (PROJECT_ID, izm и prj) Ошибка всё равно выскакивает
zozuliar
новенький
 
Сообщения: 35
Зарегистрирован: 09.02.2014 21:56:58

Re: invalid request BLR error

Сообщение Максим » 28.02.2014 01:53:43

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

Re: invalid request BLR error

Сообщение *Rik* » 28.02.2014 13:50:58

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

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

Re: invalid request BLR error

Сообщение zozuliar » 28.02.2014 19:02:12

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

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


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

Re: invalid request BLR error

Сообщение *Rik* » 28.02.2014 19:30:29

Тестовый проект не поможет. Судя по 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
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: invalid request BLR error

Сообщение Максим » 01.03.2014 20:30:49

*Rik*
Это всё замечательно, но какое отношение имеют IBX к данной ветке?
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 230

Рейтинг@Mail.ru