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

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


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