Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

icaro_

recuperar ultimo codigo de um auto-incremento

Recommended Posts

Olá boa tarde!

Outro probleminha aqui,,hehe

Bom vou fazer um insert em um banco de dados na tabela de clientes,

porém estou com dificuldades em buscar o ultimo codigo do cliente,que é um auto-incremento.

Minha duvida é,

como buscar o ultimo codigo e colocar em uma variavel,

 

Não sei se fui claro,qualquer coisa eu tento explicar melhor ,

desde já agradeço.

 

Galera,fiz um teste aqui e retornou o valor esperado.

 

ficou assim

Qcadcli.close;

Qcadcli.SQL.Clear;

Qcadcli.SQL.Text:= 'select coalesce( max (cod_cli ),0 )from cliente';

Qcadcli.Open;

 

codigo muito simples tava me matando hehe

até +

Compartilhar este post


Link para o post
Compartilhar em outros sites

É isso ai mesmo só não precisa do coalesce. Se você usou um componente Query para consultar o código, o retorno está nele mesmo, exemplo:

 

qy.Close;
qy.SQL.Text := 'SELECT (MAX(cod_cli) + 1) AS cod_cli FROM Cliente';
qy.Open;

ShowMessage('Novo código: ' + IntToStr(qy.FieldByName('cod_cli').AsInteger);

Compartilhar este post


Link para o post
Compartilhar em outros sites

E para quem não pretende ter a tabela de Clientes aberta, ou pretende obter o código antes de impor a query de inserção de um novo cliente, também serviria o código:

qy.Close;

qy.SQL.Text := 'SELECT gen_ID(gn_cliente, 0) AS ultimo_cod_cli FROM RDB$Database';

qy.Open;

 

ShowMessage('Último código: ' + IntToStr(qy.FieldByName('ultimo_cod_cli').AsString);

Isso se o RDB for FireBird:

"gen_id(" é a função que excita generators,

"gn_cliente," é o generator de Id's para a tabela,

"0)" é o fator de adição para geração de próximos Ids (e é zero pois que não queremos a alterar o conteúdo do generator agora, somente queremos saber o valor que lá está no momento. Se quiser o valor para o próximo código a ser usado, troque o zero por 1)

e "RDB$Database" é a tabela de sistema que recebe queries órfãs contra o banco (o que em Oracle seria a "Dual").

Compartilhar este post


Link para o post
Compartilhar em outros sites

"É isso ai mesmo só não precisa do coalesce"

 

Mas eu acho que sei porque ele tá usando o coalesce, porque quando a tabela tá vazia sem registro nenhum, em alguns bancos o max retorna null ainda que você dê max(campo) +1 .

 

e "RDB$Database" é a tabela de sistema que recebe queries órfãs contra o banco (o que em Oracle seria a "Dual")

 

E o "gen_ID(gn_cliente, 0)" seria "SEQUENCE.CURRVAL", no Oracle usamos os sequences, se quiser incrementar basta trocar o CURRVAL pelo NEXTVAL, mas eu particularmente não importa o banco que eu esteja usando prefiro automatizar esse procedimento dentro de um trigger, fazer dentro do código só se não tiver jeito mesmo, se estiver trabalhando com banco Access, ou outras tranqueiras que não permitem trabalhar as lógicas de negócios dentro do banco de dados...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.