Obrigado pela dica, Bruno..

-----Mensagem original-----
De: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] Em
nome de Rubem Rocha
Enviada em: quarta-feira, 11 de novembro de 2009 16:17
Para: delphi-br@yahoogrupos.com.br
Assunto: RES: [delphi-br] Pegar o valor gerado do generator do firebird
Prioridade: Alta

Permita uma retificação nessa stored procedure:

 

SET TERM ^ ;

 

CREATE OR ALTER PROCEDURE PEGA_GEN_CLIENTE

RETURNS WID INTEGER

AS

BEGIN

    /* A abordagem anterior, além de ser equivocada com DISTINCT, poderia

         retornar muitas tuplas (a.k.a. linhas, registros) e ainda acarretar
uma

         exceção. Assim é seguro retornar apenas uma única tupla e um único

        valor no parâmetro de saída da stored procedure. */

    SELECT GEN_ID(GEN_CDCLIENTE, 0) FROM RDB$DATABASE INTO :WID;

END

^

 

SET TERM ; ^

 

Além dessa abordagem usando stored procedure, poderia-se simplesmente usar
um componente de consulta adotado pela sua aplicação para efetuar um simples
SELECT, assim:

 

var

  lQryIdCliente: TQuery;    //  assumindo que vc esteja usando o BDE

  lIdCliente: integer;

begin

  lQryIdCliente := TQuery.Create(Application);

  try

    lQryIdCliente.Database := Sessions.Databases[0].DatabaseName;

    lQryIdCliente.SQL.Text := ‘SELECT GEN_ID(GEN_CDCLIENTE, 0) FROM
RDB$DATABASE’;

    lQryIdCliente.Open;

    lIdCliente := lQryIdCliente.Fields[0].AsInteger;

  finally

    lQryIdCliente.Close;

    lQryIdCliente.Free;

  end;

end;

 

Boa sorte.

Sds.

 

 

De: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] Em
nome de Vinicius
Enviada em: quarta-feira, 11 de novembro de 2009 15:22
Para: delphi-br@yahoogrupos.com.br
Assunto: RES: [delphi-br] Pegar o valor gerado do generator do firebird

 

  

Vc pode fazer o seguinte:

SET TERM ^ ;

CREATE OR ALTER PROCEDURE PEGA_GEN_CLIENTE 
returns (wid integer)
as
BEGIN
SELECT DISTINCT GEN_ID(GEN_CDCLIENTE, 0) FROM BDCLIENTES INTO :Wid;
END^

SET TERM ; ^

Se vc utilizar com o parametro 1, ele ira somar o seu generator, mesmo que
vc esteja só consultando.

Logo após o ApplyUpdates, execute:

DataModule.Pega_Gen_Cliente.ExecProc.

SuaChave := DataModule.Pega_Gen_Cliente.Params[0].AsInteger;

Espero que ajude.

Vinicius
>
>
> Olá Srs
>
> Como eu faço para ter o valor no dbedit da minha primary key que é gerada
> de um generator do firebird
>
> Logo após um um ApplyUpdates(0) sem ter que abrir e fechar o formulário.
>
> O Problema é que eu só abro um registro por vez em um formulário e uso o
> valor da chave como parâmetro para localizar o registro, no momento da a
> adição dos dados e o uso do ApplyUpdates(0) não está vindo o valor primary
> key e com isso eu não vou conseguir saber o valor gerado e re abrir o
> registro para visualização.
>
> Sds
>
> Gilvan Costa



 



[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>





Responder a