Телефон: +7 (926) 245-03-63

Как создать уникальный индекс для поля?

Следующая статья: Загрузка изображений в поля BLOB.

Создание уникального ID для новой записи, существует несколько способов задавать в таблице уникальный ID.

Можно использовать автоинкрементное поле. Этот метод не очень надежен. Если таблица каким-то образом испортится и понадобится ее пересобрать, автоинкрементные поля будут перенумерованы. Хотя это легкий способ для ситуации, когда нет ссылки на ID в других таблицах, но это не очень мудрое решение в других случаях.

Можно использовать ID-таблицу. Если имеется приложение, где нескольким таблицам необходимы уникальные ID, создайте ID-таблицу (IDTable) с двумя полями: Name (первичный ключ) и Last_Id. В методе BeforePost таблицы, которой необходим уникальный 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.

Можете использовать ID-файл. Руководствуйтесь теми же принципами, что и в предыдущем способе, но вместо ID-таблицы создается ID-файл. Это дает преимущество за счет более высокой скорости работы, но в многопользовательской среде нужно заботиться о блокировке записей.