Como retornar o ID do último registro inserido?
Pessoal, outro probleminha...
Uso ADO.
Numa tabela onde existe um campo autoincremental, após inserir um registro como faço para retornar o valor do campo autoincremento deste registro que foi incluso? Exemplo: Supondo que o último registro era 13, o próximo registro incluso terá o campo autoincremento = 14, claro. Mas como ter o retorno deste ´14´ logo após inserir o registro?
Detalhe: A aplicação trabalha em rede, portanto poderão haver vários usuários acessando a mesma tabela ao mesmo tempo. Dessa forma não poderei incluir o registro e em seguida executar um Select pra pegar o último que foi incluso, pois após o meu registro, poderão ter sido inseridos outros registros por outros usuários.
valeu
rtava
Uso ADO.
Numa tabela onde existe um campo autoincremental, após inserir um registro como faço para retornar o valor do campo autoincremento deste registro que foi incluso? Exemplo: Supondo que o último registro era 13, o próximo registro incluso terá o campo autoincremento = 14, claro. Mas como ter o retorno deste ´14´ logo após inserir o registro?
Detalhe: A aplicação trabalha em rede, portanto poderão haver vários usuários acessando a mesma tabela ao mesmo tempo. Dessa forma não poderei incluir o registro e em seguida executar um Select pra pegar o último que foi incluso, pois após o meu registro, poderão ter sido inseridos outros registros por outros usuários.
valeu
rtava
Rtava
Curtidas 0
Respostas
Tronbr
21/07/2005
faça o seguinte:
depois de comitar sua transação em uma adoquery coloque a seguinte instrução:
select gen_id(´seu generator´, 0) from rdb$database
vc terá como retorno o valor atua do seu generator
depois de comitar sua transação em uma adoquery coloque a seguinte instrução:
select gen_id(´seu generator´, 0) from rdb$database
vc terá como retorno o valor atua do seu generator
GOSTEI 0
Beppe
21/07/2005
Uma solução seria fazer uma SP, que insere o registro e retorna o ID usado.
Algo nesse estilo é fácil. Tbm poderia buscar o próximo ID e setá-lo explicitamente no registro antes de postar.
create procedure Bah (Nome varchar(60)) returns (ID Integer) as begin ID = gen_id(GEN_Bah, 1); ... suspend; end
Algo nesse estilo é fácil. Tbm poderia buscar o próximo ID e setá-lo explicitamente no registro antes de postar.
GOSTEI 0
Rtava
21/07/2005
Fala [b:1940400e50]Beppe[/b:1940400e50]!
Obrigado pela dica. Resolvi usar a primeira opção, pois conforme comentei o sistema é usado em rede e com SP fica mais seguro.
Quanto à dica do [b:1940400e50]tronbr[/b:1940400e50], não consegui fazer funcionar. Porém, acredito que isso tenha a ver com o driver que estou usando que está gerando uma série de coisas estranhas no programa e que não deveriam existir. Mas obrigado também.
rtava
Obrigado pela dica. Resolvi usar a primeira opção, pois conforme comentei o sistema é usado em rede e com SP fica mais seguro.
Quanto à dica do [b:1940400e50]tronbr[/b:1940400e50], não consegui fazer funcionar. Porém, acredito que isso tenha a ver com o driver que estou usando que está gerando uma série de coisas estranhas no programa e que não deveriam existir. Mas obrigado também.
rtava
GOSTEI 0
Rtava
21/07/2005
tronbr, acabei conseguindo da sua maneira, porém incluindo um pequeno detalhe:
with qrAux do begin
Close;
SQL.Clear;
SQL.Add(´Select gen_id(GEN_PASTAS_ID, 1) [color=red:b9091478cd][b:b9091478cd]as ID[/b:b9091478cd][/color:b9091478cd] from rdb$database´);
Open;
end;
ShowMessage(IntToStr(qrAux[´ID´]));
Valeu!
with qrAux do begin
Close;
SQL.Clear;
SQL.Add(´Select gen_id(GEN_PASTAS_ID, 1) [color=red:b9091478cd][b:b9091478cd]as ID[/b:b9091478cd][/color:b9091478cd] from rdb$database´);
Open;
end;
ShowMessage(IntToStr(qrAux[´ID´]));
Valeu!
GOSTEI 0