FireBird добавить запись в таблицу и получить ее идентификатор

К популярной бесплатной СУБД FireBird, серверной и встраиваемой  (Embended ), можно получить досту используя компоненты Interbase которые входят в стандартную поставку Borland Delphi. Ранее я работал уже с этой СУБД , но для вставки и записи использовал хранимую процедуру на сервере. Сейчас решил сделать это запросом из компонента, который создается в  run-time, для того что бы при обновлении не было необходимости перекомпилировать хранимые процедуры, а достаточно было просто  обновить приложение. Потратив много времени на эксперименты я получил следующий код. Возможно он будет полезен кому- то и позволит сэкономить немало времени.

const
  cErrorWhileGetID = 'Ошибка при получении первичного ключа!';
var
  lID: Integer;
begin
  with TIBQuery.Create(nil) do
  try
    Database:= IBDatabase1;
    SQL.Text:= 'Select GEN_ID(GEN_Temp_ID, 1) FROM RDB$DATABASE ';
    Open;
    lID:= Fields[0].AsInteger;
  finally
    Free;
  end;
  if lID > 0 then
  with TIBSQL.Create(nil) do
  try
    try
      Database:= IBDatabase1;
      Transaction:= IBTransaction2;
      Transaction.StartTransaction;
      SQL.Text:=
        'insert into temp (id, isactive) values ( :id,:isActive);';
      ParamByName('id').AsInteger:= lID;
      ParamByName('isActive').AsInteger:= 1;
      ExecQuery;
      Transaction.Commit;
    except on e: Exception do
      begin
        Transaction.Rollback;
        raise;

      end;
    end;
  finally
    Free;
  end
  else
    raise Exception.Create(cErrorWhileGetID);
end;
Share

Tags: , , ,

2 Responses to “FireBird добавить запись в таблицу и получить ее идентификатор”

  1. samsim пишет:

    Очень краткий и удобный код. Слазу ясно, что писал проффи!

  2. спасибо. за похвалу.
    Вы давно программируете на Delphi ?

Leave a Reply