[firebase-br] Store Procedure

auristonlopes auristonlopes em ig.com.br
Dom Mar 6 19:32:08 -03 2005


Lendo um exemplo no livro do cantu, resolvi fazer uma SP, para ver se 
realmente funciona, que foi assim. 
with IBStoredProc1 do 
   begin 
      ParamByName('CODPRO').AsInteger := Dm.qrymovprodCOD_MAT.AsInteger; 
      ParamByName('INICIO').AsDateTime:= 
StrToDate('01/'+Copy(DateToStr(dm.qrymovprodDATA_EMI.AsDateTime),4,7)); 
      ParamByName('FIM').AsDateTime   := dm.qrymovprodDATA_EMI.AsDateTime; 
      ExecProc; 
   end; 
So que retorna o seguinte erro 
    0.0 is not a valid timestamp. 
Agora que tipo de campo retorna as SP, 
Alguem me de uma luz 
sds 
auriston. 

  ******** Corpo da SP 
CREATE PROCEDURE FECHAMENTO (CODPRO INTEGER ,INICIO DATE, FIM DATE) RETURNS 
(SALDOAN NUMERIC(9,4), SAIDA NUMERIC(9,4), ENTRADA NUMERIC(9,4), SALDOAT 
NUMERIC(9,4)) 
AS 
DECLARE VARIABLE SALDO_ANTERIOR NUMERIC(9,4); 
DECLARE VARIABLE TOTAL_SAIDA    NUMERIC(9,4); 
DECLARE VARIABLE TOTAL_ENTRADA  NUMERIC(9,4); 
DECLARE VARIABLE SALDO_FINAL    NUMERIC(9,4); 
BEGIN 
   SELECT SUM(ENTRADAS)-SUM(SAIDAS) FROM MOVPROD WHERE ((COD_MAT = :CODPRO) 
AND (DATA_EMI < :INICIO) AND (CANCELADA = 'N') AND (MOVIES = 'S')) INTO 
:SALDO_ANTERIOR; 
   if (:SALDO_ANTERIOR IS NULL) then SALDO_ANTERIOR = 0.00; 
   SALDOAN = :SALDO_ANTERIOR; 
   SELECT SUM(ENTRADAS) FROM MOVPROD WHERE ((COD_MAT = :CODPRO) AND 
(DATA_EMI >= :INICIO) AND (DATA_EMI <= :FIM) AND (CANCELADA = 'N') AND 
(MOVIES = 'S')) INTO :TOTAL_ENTRADA; 
   if (:TOTAL_ENTRADA IS NULL) then TOTAL_ENTRADA = 0.00; 
   ENTRADA = :TOTAL_ENTRADA; 
   SELECT SUM(SAIDAS) FROM MOVPROD WHERE ((COD_MAT = :CODPRO) AND (DATA_EMI 
>= :INICIO) AND (DATA_EMI <= :FIM) AND (CANCELADA = 'N') AND (MOVIES = 'S')) 
INTO :TOTAL_SAIDA; 
   if (:TOTAL_SAIDA IS NULL) then TOTAL_SAIDA = 0.00; 
   SAIDA = :TOTAL_SAIDA; 
   SELECT SUM(ENTRADAS)-SUM(SAIDAS) FROM MOVPROD WHERE ((COD_MAT = :CODPRO) 
AND (DATA_EMI >= :INICIO) AND (DATA_EMI <= :FIM) AND (CANCELADA = 'N') AND 
(MOVIES = 'S')) INTO :SALDO_FINAL; 
   if (:SALDO_FINAL IS NULL) then  SALDO_FINAL = 0.00; 
   SALDOAT = :SALDO_FINAL; 
   SUSPEND; 
END; 


Mais detalhes sobre a lista de discussão lista