Тестовый проект не поможет. Судя по 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