Descoberta do ID gerado automaticamente

06/10/2015

0

Ola Pessoal. Estou com um problema em relação ao ID. Dentro de minha base em firebird 2.5, com delphi 7, tenho um form que quando geral um registro em uma tabela, a chave principal é gerada por um ID automatico (generate dentro da base). Este campo chave por exemplo: CODIGOPRODUTO, após gerado preciso alimentar outra base com o numero automatico gerado naquela base, como faço para saber que numero é esse. Obrigado
Carlos Cabral

Carlos Cabral

Responder

Posts

07/10/2015

Raimundo Pereira

Cabral, Bom dia.

Depois de realizar de gravar o registro .
Você pode realizar o locate ou pode montar um select para retornar o registro e pegar o código, ou também pode ir para o ultimo registro e pegar o código .

No meu caso eu usaria o locate

Exemplo:
IF DM.SUA_TABELA.LOCATE('DESCRICAO',EDIT_COM_DESCRIÇÃO.TEXT,[]) THEN
BEGIN
SHOWMESSAGE(INTTOSTR(DM.SUA_TABELA.FIELBYNAME('CODIGOPRODUTO').ASINTEGER);
END;

Aguardo retorno.
Responder

07/10/2015

Marcos P

Responder

07/10/2015

Carlos Cabral

Cara, achei uma idéia ótima. Pensei em pegar o ultimo numero por select, mas fiquei meio em duvida. O locate também daria certo, mas paira ainda uma situação. E me desculpe pela ignorancia, mas não tenho muita experiencia em alguns comandos. E Quando eu tiver por exemplo estações e exatamente naquele momento as mesmas estiverem fazendo o mesmo cadastro e por ventura gravarem ao mesmo tempo ?? Neste caso o LOCATE também me ajudaria ??
Responder

08/10/2015

Marcos P

Responder

24/10/2015

Carlos Cabral

.

Marco

Eu acho que não compreendi ou nao sei usar esse comando. Após eu dar o comando POST e APPLY UPDATE no delphi e o próprio firebird incrementar um ID automatico
como eu faço para pegar o ID que foi gerado pelo banco ? Como devo utilizar o RETURNING ?
Responder

11/11/2015

Carlos Cabral

Utiliza uma select, mas de tabelas internas do banco de dados do FireBird, que irá trazer o último ID do generator.

class function TSQL.GetMaxCode(const AGeneratorName: String): String;
begin
  Result := 'SELECT GEN_ID('+ AGeneratorName +', 0) AS CODIGO FROM RDB$DATABASE';
end;



Lembrando que, a SQL está colocando como parâmetro o valor 0, ou seja, NÃO SERÁ INCREMENTADO nada no generator, apenas trazer o último valor, como o campo CODIGO, abaixo outra função que obtém o valor:

function TProduto.GetMaxCode: System.Integer;
begin
  try
    fConnection.ClearSQL;
    fConnection.AddSQL(TSQL.GetMaxCode('ID_PRODUTO'));
    fConnection.OpenSQL;

    Result := fConnection.FieldByName('CODIGO').AsInteger

  except
    raise;
  end;
end;


Meu amigo, muito obrigado. Testei e funcionou legal. Obrigado
Responder

25/09/2020

Socrates Foschera

bom dia quero que o proximo contador gerado apareça quando for clicado no botao novo como proceder e não que apareça depois que for salvo
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar