MySQL/PHP/Delphi: Resgatando o ID da última entrada

Quando desenvolvemos um sistema que tem operação com base de dados é inevitável que exista relação entre as tabelas e por vezes somos obrigados a inserir dados em uma tabela e em seguida inserir novos dados em uma segunda tabela que tenha um registro de ligação entre elas.

Um caso clássico seria uma tabela de cadastro de dados onde armazenamos os dados pessoais dos envolvidos no sistema e em uma segunda tabela inserimos, por exemplo, dados referentes ao desempenho dessa pessoa, na segunda tabela, normalmente, usamos como referência um código de registro da primeira tabela para fazer a ligação.

É muito apropriado criar formulários únicos com dados que estão nas duas tabelas, para economizar processo e para agilizar o colhimento das informações, mas temos que ao gravar os dados saber se é de um envolvido já cadastrado ou um novo cadastro. Quando temos um cadastrado existente fica fácil, pois ele é reconhecido e já sabemos o número de registro dele.

No caso de um novo envolvido temos que criar um registro na tabela de cadastro e ao mesmo tempo fazer a inserção nas tabelas ligadas com o mesmo registro já criado, para isso temos comandos específicos para recuperar essa entrada sem ter que fazer várias telas de formulário e sem fazer novas consultas para resgatar o número dá última entrada, seguem os exemplos:

PHP: Basta criar uma vaiável com o comando mysql_insert_id().

$id=mysql_insert_id();

Delphi: É útil em sistemas envolvendo bilbioteca de acesso direto, sem a utilização do BDE, por exemplo o Zeos.

DM.SQLApoio.SQL.Clear;
DM.SQLApoio.SQL.Add(‘select LAST_INSERT_ID() AS “id”‘);
DM.SQLApoio.ExecSQL;
DBText1.DataField:=’id’;
DM.SQLApoio.Active:=True;
DBText1.Refresh;

Lembrando que no exemplo acima, não podemos interromper a conexão com banco, pois ele recupera o último ID da conexão que está sendo trabalhada, no exemplo acima eu coloco o valor em um DataField. Esses comandos devem ser lançados imediatamente as linhas de inserção dos dados.

Compatilhe esse artigo!

Leave a Reply

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

This site uses Akismet to reduce spam. Learn how your comment data is processed.