Существует несколько способов задавать в таблице уникальный ID.
procedure TForm1.Table1BeforePost(DataSet: TDataSet);
var
Id: Integer;
begin
{ проверяем, существует ли ID для этой записи }
if Table1.Fields[0].AsInteger = 0 then begin
{ ищем имя таблицы в ID Таблице }
IDTable.FindKey([Name]);
{ извлекаем последний ID - подразумеваем блокировку записи }
Id := IDTable.FieldByName('Last Id').AsInteger;
Inc(Id);
{ записываем новый ID в ID-таблицу - подразумеваем разблокировку таблицы }
IDTable.FieldByName('Last Id').AsInteger := Id;
IDTable.Post;
{ записываем извлеченный ID в вашу таблицу }
Table1.Fields[0].AsInteger := Id;
end;
end;
Поместив этот код в обработчик события BeforePost, можно убедиться, что все ID будут последовательными. Недостаток: если пользователь во время попытки добавления новой записи вдруг передумает, то получится запись только с заполненным полем ID.Для того чтобы воспользоваться данным способом (последовательные ID), поместите приведенный выше код в обработчик события таблицы OnNewRecord.