Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  175

•  TDictionary Custom Sort  3 348

•  Fast Watermark Sources  3 099

•  3D Designer  4 856

•  Sik Screen Capture  3 358

•  Patch Maker  3 560

•  Айболит (remote control)  3 669

•  ListBox Drag & Drop  3 026

•  Доска для игры Реверси  81 763

•  Графические эффекты  3 952

•  Рисование по маске  3 258

•  Перетаскивание изображений  2 636

•  Canvas Drawing  2 766

•  Рисование Луны  2 590

•  Поворот изображения  2 201

•  Рисование стержней  2 175

•  Paint on Shape  1 573

•  Генератор кроссвордов  2 247

•  Головоломка Paletto  1 774

•  Теорема Монжа об окружностях  2 242

•  Пазл Numbrix  1 689

•  Заборы и коммивояжеры  2 063

•  Игра HIP  1 285

•  Игра Go (Го)  1 235

•  Симулятор лифта  1 480

•  Программа укладки плитки  1 221

•  Генератор лабиринта  1 551

•  Проверка числового ввода  1 371

•  HEX View  1 499

•  Физический маятник  1 362

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Создание уникального поля 2



Автор: Serg

Вот мой вариант получения очередного уникального (возрастающего) ID

По полю FieldName строится уникальный индекс

Заодно скажу, что использование AutoInc не есть мудрое решение. А если надо пересобрать таблицы ?


{ Get max key value}
function quGetMaxID_(tbName,FieldName: String): LongInt;
begin
  with TQuery.Create(nil) do
    try
      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 do
  begin
    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 do
  begin
    Result := quExecuteSQL_(str);
    if Result then
      Break;
  end;
end;

function quExecuteSQL_(SQLstring: string): boolean;
begin
  with quCreateTmp_(SQLstring) do
  begin
    try
      ExecSQL;
      Result := True;
    except
      on E: Exception do
      begin
        Result := False;
      end;
    end;
    Free;
  end;
end;

function quCreateTmp_(SQLstring: string): TQuery;
begin
  Result:= TQuery.Create(nil);
  with Result do
  begin
    DatabaseName := DBname;
    SQL.Text := SQLString;
  end;
end;





Похожие по теме исходники

Создание таблиц в Paradox

Линейная интерполяция функции

Интерполяция сплайнами




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте