RES: RES: [firebase-br] Stored Procedures & Delphi 7

Mauricio Torres Fernandes mtfernandes em pop.com.br
Qui Fev 10 13:11:01 -03 2005


Hummm... Prestando mais atenção na sua procedure percebo que ela retorna
mais de um registro, portanto a forma que eu te passei não deve funcionar
corretamente... Esse método funciona quando temos apenas 1 registro de
retorno... Preciso dar uma olhada aqui para ver como faz, pois não utilizo
isso a tempos...

Mauricio.

> -----Mensagem original-----
> De: lista-bounces em firebase.com.br 
> [mailto:lista-bounces em firebase.com.br] Em nome de Rodrigo Schiavo
> Enviada em: quinta-feira, 10 de fevereiro de 2005 12:41
> Para: FireBase
> Assunto: Re: RES: [firebase-br] Stored Procedures & Delphi 7
> 
> Obrigado Mauricio, agora soh mais uma coisa, como devo 
> modificar esta Stored Procedure para poder utilzar seu 
> retorno no ClientDataSet?
> 
> 
> Mauricio Torres Fernandes escreveu:
> 
> >A estrutura de acesso está correta, mas a forma como você 
> está executando a
> >procedure pode estar errada. Com Stored Procedures que não retornam
> >datasets, você não pode usar "ClientDataSet1.Open" ou 
> "ClientDataSet1.Active
> >:= True". Use "ClientDataSet.Execute" e os valores serão 
> retornados em
> >parâmetros, como o exemplo abaixo:
> >
> >...
> >ClientDataSet1.Execute;
> >iFinalizadora :=
> >ClientDataSet1.Params.ParamByName('FINALIZADORA').AsInteger;
> >fSaldo := ClientDataSet1.Params.ParamByName('SALDO').AsFloat;
> >...
> >
> >Espero ter ajudado,
> >
> >
> >Mauricio.
> >
> >  
> >
> >>-----Mensagem original-----
> >>De: lista-bounces em firebase.com.br 
> >>[mailto:lista-bounces em firebase.com.br] Em nome de Rodrigo Schiavo
> >>Enviada em: quinta-feira, 10 de fevereiro de 2005 11:04
> >>Para: FireBase
> >>Assunto: [firebase-br] Stored Procedures & Delphi 7
> >>
> >>Bom dia amigos.
> >>
> >>Hoje comecei a trabalhar com Stored Procedures no Firebird 
> >>1.5.1 e Delphi 7, porém algumas dúvidas surgiram aqui.
> >>
> >>Ateh hoje sempre trabalhei com o consjunto de componentes 
> >>DBExpress, utilizando SQLQuery, DataSetProvider e 
> >>ClientDataSet, agora que vou trabalhar com Stored procedures 
> >>quais componentes devo utilizar?
> >>
> >>Tentei com o conjunto SQLStoredProc, DataSetProvider e 
> >>ClientDataSet, mas quando eu ativo o SQLStoredProc ou abro o 
> >>ClientDataSet eh retornado o erro: Cursor not returned from Query.
> >>
> >>Abaixo segue o código da Stored Procedure.
> >>
> >>SET TERM ^ ;
> >>
> >>CREATE PROCEDURE CAIXAS_SALDO_FINALIZADORAS (
> >>    CAIXA SMALLINT,
> >>    MOVIMENTO DATE)
> >>RETURNS (
> >>    FINALIZADORA SMALLINT,
> >>    SALDO DECIMAL(10,3))
> >>AS
> >>DECLARE VARIABLE FIN SMALLINT;
> >>DECLARE VARIABLE CREDITO NUMERIC(10,3);
> >>DECLARE VARIABLE DEBITO DECIMAL(10,3);
> >>begin
> >>
> >>  -- Seleciona as finalizadoras do movimento
> >>  FOR SELECT DISTINCT(CD.FINALIZADORA)
> >>  FROM CAIXAS_DETALHES CD
> >>  WHERE ((CD.CODIGO=:CAIXA) AND (CD.DATA=:MOVIMENTO))
> >>  INTO :FIN
> >>  DO
> >>  BEGIN
> >>
> >>    -- Seleciona créditos
> >>    SELECT COALESCE(SUM(C.VALOR),0)
> >>    FROM CAIXAS_DETALHES C
> >>    WHERE ((C.CODIGO=:CAIXA) AND (C.DATA=:MOVIMENTO) AND
> >>(C.FINALIZADORA=:FIN) AND (TIPO='C'))
> >>    INTO :CREDITO;
> >>
> >>    -- Seleciona débitos
> >>    SELECT COALESCE(SUM(C.VALOR),0)
> >>    FROM CAIXAS_DETALHES C
> >>    WHERE ((C.CODIGO=:CAIXA) AND (C.DATA=:MOVIMENTO) AND
> >>(C.FINALIZADORA=:FIN) AND (TIPO='D'))
> >>    INTO :DEBITO;
> >>
> >>
> >>    FINALIZADORA=:FIN;
> >>    SALDO=CREDITO-DEBITO;
> >>
> >>    SUSPEND; -- Retorna registro
> >>  END
> >>
> >>end
> >>^
> >>
> >>SET TERM ; ^
> >>
> >>[ ]'s Rodrigo Schiavo
> >>    
> >>
> >
> >
> >
> >
> >
> >______________________________________________
> >FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> >Para editar sua configuração na lista, use o endereço 
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> >
> >  
> >
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço 
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> 
> 








Mais detalhes sobre a lista de discussão lista