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

Mauricio Torres Fernandes mtfernandes em pop.com.br
Qui Fev 10 14:53:20 -03 2005


Assim que possível... :-)

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 14:27
> Para: FireBase
> Assunto: Re: RES: RES: [firebase-br] Stored Procedures & Delphi 7
> 
> Se não for pedir muito, poderia por favor dar uma olhada em 
> como se faz isso e me retornar o e-mail, por que isto esta me 
> atrapalhando por aqui.
> 
> [ ]'s
> 
> Mauricio Torres Fernandes escreveu:
> 
> >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








Mais detalhes sobre a lista de discussão lista