[firebase-br] Store Procedure - O que há de errado ? - Urgente
RAMJ SISTEMAS & CONSULTORIA
jubrovolski em yahoo.com.br
Qua Jan 26 13:58:20 -03 2005
Estou chamando esta Store Procedure de dentro do Delphi, porém os valores
ficam nulos. O que há de errado? Por favor é urgente.
procedure Tfrm_movcaixa.calccaixa();
var
SProcedure : TIB_StoredProc;
Transacao : TIB_Transaction;
begin
SProcedure := TIB_StoredProc.Create(nil);
Transacao := TIB_Transaction.Create(nil);
Transacao.IB_Connection := datdados.conexao;
with SProcedure do begin
IB_Transaction := Transacao;
Transacao.StartTransaction;
IB_Connection := datdados.conexao;
StoredProcName := 'SALDOCAIXA';
Parambyname('DATA').asdate :=
datdados.qrymovcaixa.fieldbyname('datalan').asdate;
Parambyname('CAIXA').asinteger :=
datdados.qrymovcaixa.fieldbyname('codcaixa').asinteger;
ExecProc;
Transacao.Commit;
Destroy;
end;
end;
****************************************** SP
SET TERM ^ ;
CREATE PROCEDURE SALDOCAIXA (
DATA DATE,
CAIXA INTEGER)
AS
DECLARE VARIABLE ULTLANCTO INTEGER;
DECLARE VARIABLE SALDOANT NUMERIC(15,2); DECLARE VARIABLE ID INTEGER;
DECLARE VARIABLE TIPO VARCHAR(1); DECLARE VARIABLE VALOR NUMERIC(15,2);
begin
select Max(NUMLAN) from MOVCAIXA where DATALAN<:DATA and CODCAIXA =
:CAIXA into :ULTLANCTO; /* Aki eu estou solicitando o ID do ultimo
lançamento até o dia 01/01/2005 */
select SALDOAT from MOVCaixa where NUMLAN=:ULTLANCTO and CODCAIXA =
:CAIXA into :SALDOANT; /* Aki eu consegui achar o valor do ultimo saldo
antes do dia 02/01/2005 */
for select NUMLAN,TIPOLAN,VALORLAN from MOVCAIXA where DataLAN>=:DATA and
CODCAIXA = :CAIXA order by DATALAN,TIPOLAN,NUMLAN into :ID,:TIPO,:VALOR do
begin
if (:TIPO='C') then begin
SALDOANT=:SALDOANT+:VALOR;
end else begin
SALDOANT=:SALDOANT-:VALOR;
end
update MOVcaixa set SALDOAT=:SALDOANT where NUMLAN=:ID;
end
end
^
SET TERM ; ^
GRANT SELECT,UPDATE ON MOVCAIXA TO PROCEDURE SALDOCAIXA;
GRANT EXECUTE ON PROCEDURE SALDOCAIXA TO SYSDBA;
Mais detalhes sobre a lista de discussão lista