Заблокирован
Регистрация: 19.03.2009
Сообщений: 6
|
Проблема с выходным параметром хранимой процедуры
Здорова Товарищи...
Вопрос следующий...
Есть процедура хранимая (FireBird 2):
Цитата:
create or alter procedure ADDORDERS (
OPKGONE smallint,
NUMPHONE varchar(15),
DNUMPHONE1 varchar(15),
DNUMPHONE2 varchar(15),
CSURNAME DVCHAR_AVERAGE,
CNAME DVCHAR_AVERAGE,
CSECONDNAME DVCHAR_AVERAGE,
CADRES DVARCHAR,
OOPERID DINT_NULL,
NUMITEM DINT_NULL,
ORDERDESC DTEXT,
NORDER varchar(20),
IDORDER DINT_NULL)
returns (
ORDNUMBER varchar(20))
as
declare variable TMPNM smallint;
declare variable COUNTRECORD integer;
declare variable CID DINT_NULL;
begin
/* Procedure Text */
countrecord = 0;
select count(id) from customers where PHONE LIKE :numphone into :countrecord;
select count(id)+1 from orders where orderdate >= current_date and ITEMKCH = :numitem into :tmpnm;
if (countrecord = 0) then begin
insert into customers (PHONE, DPHONE1, DPHONE2, SURNAME, NAME, SECONDNAME) values (:numphone, numphone1, numphone2, :csurname, :cname, :csecondname)
returning ID into :cid;
end
else begin
select id from customers where PHONE LIKE :numphone into :cid;
update customers set PHONE = :numphone, SURNAME = :csurname, NAME = :cname, SECONDNAME = :csecondname
where ID = :cid;
end
insert into orders (ID, ORDERNUM, CUSTOMERID, OPERATORID, ORDERDATE, ORDERTIME, DELIVERYADR, ITEMKCH, PKGONE, DESCORDER, APRINT)
values (:idorder, :norder || '-' || :tmpnm, :cid, operid, cast('NOW' as date), cast('NOW' as time), :cadres, :numitem, pkgone, rderdesc, 0);
ordnumber = :norder || '-' || :tmpnm;
suspend;
end
|
--------------------------
В программе хочу получить данные выходной переменной : ordnumber
Делаю так в программе
Код:
if not DM.FSProc.Transaction.InTransaction then DM.FSProc.Transaction.StartTransaction;
with DM.FSProc do begin
StoredProcName := 'ADDORDERS';
ParamByName('NUMPHONE').AsString := OperationPhoneRusNumber(edPhoneCall.Text);
ParamByName('DNUMPHONE1').AsString := OperationPhoneRusNumber(edDPhone1.Text);
ParamByName('DNUMPHONE2').AsString := OperationPhoneRusNumber(edDPhone2.Text);
ParamByName('CSURNAME').AsString := edSurN.Text;
ParamByName('CNAME').AsString := edName.Text;
ParamByName('CSECONDNAME').AsString := edSecN.Text;
ParamByName('CADRES').AsString := strAddress{edAdr.Text};
ParamByName('OOPERID').AsInteger := DM.idOper;
ParamByName('NUMITEM').AsInteger := item_kitchen;
if rbtPkgYes.Checked then ParamByName('OPKGONE').AsInteger := 1;
if rbtPkgNo.Checked then ParamByName('OPKGONE').AsInteger := 2;
ParamByName('ORDERDESC').AsString := DescOrder.Lines.Text;
// ParamByName('MINFORDER').AsString := moreInfoDesc.Lines.Text;
ParamByName('NORDER').AsString := nm_order;
ParamByName('IDORDER').AsInteger := frmGlav.ID_GEN_ID_ORDERS;
Prepare;
ExecProc;
end;
afterNumOrd := DM.FSProc.ParamValue('ORDNUMBER').AsString; - вот здесь появляется ошибка
DM.FSProc.Transaction.Commit;
afterNumOrd := DM.FSProc.ParamValue('ORDNUMBER').A sString - возникает ошибка Invalid varint operation
Не подскажете где ошибка, или что я делаю неправильно
Спасибо
|