Olá Pessoal, no meu Curso D2007 DBX4 FB2.0 eu mostrei uma maneira de retornar o próximo ID no Firebird com o uso de Generator. Acontece que a partir daí recebi inúmeros de pessoas querendo saber como fazer no MySql. Então vamos lá.
var
Qry: TSQLQuery;
Transaction: TDBXTransaction;
begin
try
try
Transaction := DBAcesso.DBXConnection.BeginTransaction(TDBXIsolations.ReadCommitted);
DBAcesso.ExecuteDirect('UPDATE SEQUENCE SET NEXTVALUE = NEXTVALUE+1 WHERE TABLENAME = '+QuotedStr(tablename));
Qry := TSQLQuery.Create(Self);
Qry.SQLConnection := DBAcesso;
Qry.SQL.Add('SELECT NEXTVALUE FROM SEQUENCE WHERE TABLENAME = '+QuotedStr(tablename));
Qry.Open;
Result := Qry.Fields[0].AsInteger;
DBAcesso.DBXConnection.CommitFreeAndNil(Transaction);
except
DBAcesso.DBXConnection.RollbackFreeAndNil(Transaction);
end;
finally
FreeAndNil(Qry);
end;
end;