Fórum retornar o código gerado (auto-incremento) para a aplicação #54752

15/01/2006

0

quero que após inserir um registro, a aplicação receba qual foi o código que o banco gerou no auto-incremento.

ou seja, tenho uma tela de cadastro de Clientes, quando pesso um novo (insert) o campo código fica em branco. preencho todo o registro e salvo (post). o campo código continua em branco, mas o valor já foi gerado na tabela.
quero agora colocar o valor deste campo logo após salvar o registro.


Raserafim

Raserafim

Responder

Posts

15/01/2006

Edilcimar

eu faço assim
Append;
With IBQuery1 do
Begin
Close;
SQL.Clear;
SQL.Add(´Select gen_id(CLIENTES_NUMCLIENTE_GEN, 1) from RDB$DATABASE´);
IBQuery1.Open;
NumCliiente := IBQuery1.Fields[0].AsInteger;
End;
e depois pego a variável NumCliente e jogo para dentro do banco, no campo autoincremento


Responder

Gostei + 0

15/01/2006

Thomaz_prg

Basta dar um refresh na tabela.


Responder

Gostei + 0

16/01/2006

Raserafim

thomaz, não posso fazer assim pois a query que está ligada ao form só retorna o registro que eu digo qual é o código.
ou seja, no momento que eu der um refresh na tabela, tenho que passar como parâmetro para a query o código do cliente.


Responder

Gostei + 0

16/01/2006

Raserafim

edilcimar, apesar de a sua forma funcionar, fiquei me perguntando se realmente seria a melhor. vi uma brexa aí, mas confesso que é pouco provável.
vc está olhando o valor do auto0incrmento atual logo após o registro ser salvo, mas e se alguém tb salvar um registro no intervalo de vc salvar o seu e ver o gen_id? assim vc vai ter um valor errado.

acho q o ideal seria que após salvar o registro, a aplicação receber o valor que foi utilizado. mas como a aplicação vai saber isso? eis a questão.


Responder

Gostei + 0

16/01/2006

Edilcimar

aquilo acontece após o append e antes do post, portanto se outro usuário incluir um número o gerador irá fornecer um número subseqüente


Responder

Gostei + 0

16/01/2006

Thomaz_prg

thomaz, não posso fazer assim pois a query que está ligada ao form só retorna o registro que eu digo qual é o código. ou seja, no momento que eu der um refresh na tabela, tenho que passar como parâmetro para a query o código do cliente.


Mas se o parâmetro já foi passado, ele ainda terá em memória o último valor lançado, sendo assim, você pode usar normalmente o Refresh.


Responder

Gostei + 0

17/01/2006

Raserafim

thomaz, o problema maior é com os registros novos, que ainda estão sem código. pois só irão receber quando forem salvos.


Responder

Gostei + 0

18/01/2006

Raserafim

aquilo acontece após o append e antes do post, portanto se outro usuário incluir um número o gerador irá fornecer um número subseqüente


edilcimar, vc está dizendo que esta função também faz com que seja incrementado de um do valor que foi retornado? é isso?
o simples fato de consultar já vai incrementar?


Responder

Gostei + 0

18/01/2006

Edilcimar

sim, quando vc executa a sql com o gerador ele já incrementa o número do mesmo
With IBQuery1 do
Begin
Close;
SQL.Clear;
SQL.Add(´Select gen_id(CLIENTES_NUMCLIENTE_GEN, 1) from RDB$DATABASE´);
IBQuery1.Open;
NumCliente := IBQuery1.Fields[0].AsInteger;
showmessage(inttostr(numcliente));
End;
faça este teste e verá que o numcliente será alterado todas as vezes


Responder

Gostei + 0

19/01/2006

Raserafim

hummm agora sim.
acabei utilizando este esquema que vc disse.
valeu edilcimar


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar