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

•  DeLiKaTeS Tetris (Тетрис)  4 310

•  TDictionary Custom Sort  6 359

•  Fast Watermark Sources  6 145

•  3D Designer  9 090

•  Sik Screen Capture  6 470

•  Patch Maker  6 889

•  Айболит (remote control)  6 865

•  ListBox Drag & Drop  5 744

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

•  Графические эффекты  7 085

•  Рисование по маске  6 392

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

•  Canvas Drawing  5 631

•  Рисование Луны  5 332

•  Поворот изображения  4 882

•  Рисование стержней  3 462

•  Paint on Shape  2 723

•  Генератор кроссвордов  3 598

•  Головоломка Paletto  2 891

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

•  Пазл Numbrix  2 432

•  Заборы и коммивояжеры  3 115

•  Игра HIP  2 072

•  Игра Go (Го)  2 001

•  Симулятор лифта  2 359

•  Программа укладки плитки  2 060

•  Генератор лабиринта  2 520

•  Проверка числового ввода  2 204

•  HEX View  2 534

•  Физический маятник  2 148

 
скрыть

  Форум  

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

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



Delphi Sources

Создание уникального ID для новой записи



Американская школа для одаренных детей, 1970 год, урок информатики...
- А теперь, детки, какие програмки вы бы хотели написать, когда подрастете? Вот ты, Питер?
- Я бы написал такую крутую утилитку, которая бы быстро так лечила бы винчестер от ошибок!
- Молодец, Питер! А ты, Юджин?
- А я бы сделал такую программу, которая бы быстро и без глюков сжимала файлы!
- Умница, Юджин! А ты, Билли, чего молчишь?
- Ну, ничего-ничего!... Будет вам всем быстро, будет вам без глюков...

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

  1. Вы можете использовать поле с автоприращением

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

  2. Вы можете использовать ID-таблицу

    Если у вас имеется приложение, где нескольким таблицам необходимы уникальные ID, создайте ID-таблицу с двумя полями:

    Table Name A (первичный ключ)
    Last Id N
    В методе BeforePost таблицы, которой необходим уникальный ID, делайте примерно так:

  3. TableBeforePost(Sender: TObject)
    var
      Id: Integer;
    begin
      with TTable(Sender) do
      begin
        {проверяем, существует ли ID для этой записи}
        if Field[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 в вашу таблицу}
          Field[0].AsInteger := Id;
        end;
      end;
    end;
    

    Если вы поместите этот код в обработчик события таблицы BeforePost, вы убедитесь в том, что все ID будут последовательными (без "дырок"). Недостаток: если пользовать во время попытки добавления новой записи вдруг передумает, вы будете иметь запись с заполненным только полем ID.

    В случае, если вы решили воспользоваться данным способом (последовательные ID), поместите приведенный выше код в обработчик события таблицы OnNewRecord.

  4. Вы можете использовать ID-файл

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





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

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

Нейросеть для распознавания образов

Механизм станка качалки для нефти

Весы для взвешивания

 

Кувшины для воды

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




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

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