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