Здравствуйте!
Возникла следующая проблема:
В базе данных есть тригер dcDiscountCard_GEN_ID, он служит для того, чтобы генерировать уникальный код ключевого поля одной из таблиц в этой базе. Работает по принципу: при доб
авлении новой записи в таблицу значение увеличивается на +1
AS
BEGIN
IF (NEW."DiscountCardID" IS NULL) THEN
NEW."DiscountCardID" = GEN_ID("dcDiscountCardIDGen",1);
END
далее есть хранимая процедура которая отвечает за доб
авление новой записи в базу
begin
if (exists(select * from "dcDiscountCard"
where "DiscountCardID" = :"DiscountCardID"))
then
begin
update "dcDiscountCard" set "DiscountIssueID" = :"DiscountIssueID",
"Name" = :"Name", "Code" = :"Code", "Enabled" = :"Enabled",
"ExpireDate" = :"ExpireDate", "Locked" = :"Locked",
"AllowInOffline" = :"AllowInOffline", "TransactionID" = :"TransactionID"
where "DiscountCardID" = :"DiscountCardID";
end
else
begin
INSERT INTO "dcDiscountCard" ( "DiscountCardID", "DiscountIssueID", "Name",
"Code", "Enabled", "ExpireDate", "Locked", "AllowInOffline", "TransactionID")
VALUES (:"DiscountCardID", :"DiscountIssueID", :"Name", :"Code", :"Enabled",
:"ExpireDate", :"Locked", :"AllowInOffline", :"TransactionID");
end
suspend;
end
В коде делфи для вызова этой процедуры пишу следующие:
ibstoredproc1.Prepare;
ibstoredproc1.Params[0].AsInteger:=777; //DiscountCardID
ibstoredproc1.Params[1].AsInteger:=1; //DiscountIssueID
ibstoredproc1.Params[2].AsString:='privet'; //Name
ibstoredproc1.Params[3].AsString:='heloo'; //Code
ibstoredproc1.Params[4].AsInteger:=1; //Enabled
ibstoredproc1.Params[5].Value:=null; //ExpireDate
ibstoredproc1.Params[6].AsInteger:=0; //Locked
ibstoredproc1.Params[7].AsInteger:=1; //AllowInOffline
ibstoredproc1.Params[8].AsInteger:=0; //TransactionID
ibstoredproc1.ExecProc;
как мне выполнить тригер? как получить его новое значение "DiscountCardID" после выполнения? чтобы потом в дальнейшем присвоить его значение соответсвующему полю в новой записи ibstoredproc1.Params[0].AsInteger:=?
??;
Помогите пожайлуста=)
Буду очень признателен=)
Базу данных поправить нельзя... так как для этой базы есть свой уже готовый клиент(программный продукт). Я пишу дополнительное приложение собственными силами для этой базы для загрузки информации в базу, так как стандартный клиент не обладает хорошим загрузчиком, вернее обладает, но очень кривым, не подходяшим под мои нужды=)