Amigos da lista bom dia.

Tenho uma SP (Abaixo segue seu código) e na minha máquina local ele 
atualizar o valor na tela com apenas um clique no botão que chamada a SP 
no Aplicativo.
Mas realizando testes em um BD instalado em um Fedora 6 - Firebird 1.5, 
para que o valor seja atualizado ne tela, precisa clicar duas vezes no 
botão.

Utilizo Delphi 6 Professional com IBO.

Alguém poderia me ajudar? Alguém já passou por isso?

Desde já agradeço a todos pela atenção.

/********* Chamando SP no Aplicativo ***********/

With Dm1.QuCalc do
  begin
    Close;
    SQL.Clear;
    SQL.Add('EXECUTE PROCEDURE 
PRECO_PONDERADO_COMPRA('+#39+varCodPro+#39+')');
    ExecSQL;
    Close;
  end;

/********* SP Criada ***********/

SET TERM ^ ;

CREATE PROCEDURE PRECO_PONDERADO_COMPRA (
    CODPRO INTEGER)
AS
DECLARE VARIABLE VARCODCOMPRA INTEGER;
DECLARE VARIABLE VARQTITCOMPRA NUMERIC(18,4);
DECLARE VARIABLE VARCODPRO INTEGER;
DECLARE VARIABLE VARTOTALQT NUMERIC(18,4);
DECLARE VARIABLE TOTALCOMPRA1 NUMERIC(18,4);
DECLARE VARIABLE TOTALCOMPRA2 NUMERIC(18,4);
DECLARE VARIABLE PONDERADO NUMERIC(18,4);
begin
  Ponderado = 0;
  VARTOTALQT = 0;

  /* ******** Ultima compra ******** */

  select max(a.codcompra)from compra a, itcompra b
    where b.codpro = :codpro
    and a.codcompra = b.codcompra
    and a.statuscompra = 'CONFIRMADA'
    into :varcodcompra;

  if (not :varcodcompra is null) then
    begin
      select sum(qtitcompra*pritcompra), codpro from itcompra
        where codcompra = :varcodcompra
        and codpro = :codpro
        group by codpro
        into :TotalCompra1, :varcodpro;
   
      select sum(qtitcompra), codpro from itcompra
        where codcompra = :varcodcompra
        and codpro = :codpro
        group by codpro
        into :VARQTITCOMPRA, :varcodpro;
   
        VARTOTALQT= VARTOTALQT + :VARQTITCOMPRA;
   
        ponderado = ponderado + :TotalCompra1;
    end

  /* ******** Penultima compra ******** */

  select max(a.codcompra)from compra a, itcompra b
    where b.codpro = :codpro
    and a.statuscompra = 'CONFIRMADA'
    and a.codcompra <> :varcodcompra
    and a.codcompra = b.codcompra
    into :varcodcompra;
   
  if (not :varcodcompra is null) then
    begin
      select sum(qtitcompra*pritcompra), codpro from itcompra
        where codcompra = :varcodcompra
        and codpro = :codpro
        group by codpro
        into :TotalCompra2, :varcodpro;

      select sum(qtitcompra), codpro from itcompra
        where codcompra = :varcodcompra
        and codpro = :codpro
        group by codpro
        into :VARQTITCOMPRA, :varcodpro;

      VARTOTALQT= VARTOTALQT + :VARQTITCOMPRA;

      ponderado = ponderado + :TotalCompra2;
    end
   
  /* ******** Pondera os valores ******** */

  if (ponderado > 0) then
    update Produto set PrPonderadoPro = :ponderado / :VARTOTALQT where 
CodPro = :CodPro;
   else
    update Produto set PrPonderadoPro = :ponderado where CodPro = :CodPro;

  suspend;
end
^

SET TERM ; ^

GRANT SELECT ON COMPRA TO PROCEDURE PRECO_PONDERADO_COMPRA;

GRANT SELECT ON ITCOMPRA TO PROCEDURE PRECO_PONDERADO_COMPRA;

GRANT SELECT,UPDATE ON PRODUTO TO PROCEDURE PRECO_PONDERADO_COMPRA;

GRANT EXECUTE ON PROCEDURE PRECO_PONDERADO_COMPRA TO SYSDBA;

Responder a