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 >>>>>