Create site free
Создание уникального ID для новой записи - Записи - Базы данных в Delphi - Каталог статей - Mvi - развлечения Существует несколько способов задавать в таблице уникальный ID.

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

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


>
Среда, 08.02.2012, 13:56
Музыка, видео, игры - MVI
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Категории каталога
ADO [15]
ASCII и CSV [12]
Access [19]
Alias [24]
BDE [37]
BLOB поля [19]
Clipper [2]
DB2 [2]
DBASE и DBF [26]
Fox Pro [1]
Interbase [21]
MSSQL [13]
ODBC [10]
Oracle [19]
Paradox [28]
SQL [30]
Sybase [1]
База данных [31]
Закладки [2]
Записи [19]
Индексы [10]
Компоненты и Базы данных [11]
Модуль данных [3]
Отчеты [3]
Ошибки БД [17]
Поиск [17]
Поля [36]
Сортировка и Фильтр [6]
Таблицы [39]
Мини-чат
Наш опрос
Какую музыку вы слушаете?
Всего ответов: 173
Главная » Статьи » Базы данных в Delphi » Записи

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

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

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

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

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

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

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


    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.

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

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

Категория: Записи | Добавил: mvi (28.10.2008)
Просмотров: 142 | Рейтинг: 0.0/0 |
Всего комментариев: 0

При копировании материалов данного сайта, ссылка на него обязательна!

Имя *:
Email:
Код *:
Форма входа
E-mail:
Пароль:
Поиск
Друзья сайта
Анекдоты
Реклама
Статистика


Рейтинг@Mail.ru

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Copyright MyCorp © 2012 Хостинг от uCoz