Вот мой вариант получения очередного уникального (возрастающего) ID
По полю FieldName строится уникальный индекс
Заодно скажу, что использование AutoInc не есть мудрое решение.
А если надо пересобрать таблицы ?
{ Get max key value}function quGetMaxID_(tbName,FieldName: String): LongInt;
beginwith TQuery.Create(nil) dotry
DatabaseName := DBname;
SQL.Add('SELECT MAX('+FieldName+') FROM ' + QuotedStr(tbName));
Open;
result := Fields[0].AsInteger + 1;
finally
Close;
Free;
end;
end;
{ insert new record and return new ID value}function quInsertBlankSQL_(tbName,fName: string; var id: Longint): boolean;
var
i: integer;
begin
Result := False;
for i:=1 to RepeateAccess dobegin
id := quGetMaxID_(tbName,fName);
Result := quInsertKeySQL_(tbName,fName,id);
if Result then
Break;
end;
end;
{ Insert record for ID}function quInsertKeySQL_(tbName, KeyField: string;
KeyValue: Longint): boolean;
var
i: integer;
str: string;
begin
Result := False;
str := 'INSERT INTO '+tbName+' ('+ KeyField + ')'+
' VALUES ('+IntToStr(KeyValue)+')';
for i:=1 to gRptAccess dobegin
Result := quExecuteSQL_(str);
if Result then
Break;
end;
end;
function quExecuteSQL_(SQLstring: string): boolean;
beginwith quCreateTmp_(SQLstring) dobegintry
ExecSQL;
Result := True;
excepton E: Exception dobegin
Result := False;
end;
end;
Free;
end;
end;
function quCreateTmp_(SQLstring: string): TQuery;
begin
Result:= TQuery.Create(nil);
with Result dobegin
DatabaseName := DBname;
SQL.Text := SQLString;
end;
end;
В статье рассматриваются способы создания уникального поля в базе данных, включая использование индекса по полю FieldName и алгоритм для получения очередного уникального ID.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.