Следующая статья: Загрузка изображений в поля 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-файл. Это дает преимущество за счет более высокой скорости работы, но в многопользовательской среде нужно заботиться о блокировке записей.