Sabe aquele cadastro de cliente que você vai inserir um novo cliente e lá o código do cliente é uma coluna gerada com GENERATOR – (auto-incremento), pode ser uma grande dor de cabeça se não estiver seguro sobre o código inserido na tabela.
Muitas vezes precisa deste ID para utiliza-lo em outro lugar. Se errar o ID o registro final irá ficar errado, associando ao cliente errado…
Outra situação é, se demorar algum tempo para descobrir o ID e outro usuário inserir um outro cliente enquanto o app fazia alguma coisa…. vai dar confusão. É preciso garantir com precisão o ID que foi inserido no momento que o banco postou na tabela.
Para resolver estas situações o Firebird permite obter valores de retorno de um INSERT.
Exemplo:
insert into cliente( nome, endereco, ...) values( :nome,:endereco,...) returning id_cliente into :id
Ao executar o comando de INSERT, o banco irá retornar no parâmetro o valor inserido pelo GENERATOR no parâmetro ID.
e como essa informação e tratada por exemplo dentro do delphi??
veja esse bloco:
ClientDataSet1.Execute;
CdCodigo := ClientDataSet1.FieldByName(‘id_cliente ‘).asInteger;
seria isso?
o retorno é um parâmetro, então o correto é usar ParamByName(…, tenho report de pessoas que conseguiram retornar como FieldByName(… também, depois que fez o OPEN. No exemplo o parâmetro de retorno é o ID.