Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2012, 12:28   #1
puma
Пользователь
 
Регистрация: 22.04.2008
Сообщений: 23
По умолчанию Создание уникального ID для новой записи

Доброго время суток. Необходимо создать электронный каталог, в котором нужно чтобы при записи пользователя номер присваивался автоматически.

Пробую способ с помощью создания ID-таблицы.

Имеется база данных в Access, где используется таблица Data- Данные пользователя. Создала дополнительную таблицу, ID-таблицу с двумя полями:
Table Name (первичный ключ)
Last Id N

в обработчике события таблицы BeforePost таблицы Data , поместила следующий код

Код:
var
  Id: Integer;
begin
  with TData  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;
В строке IDTable.FindKey([Name]); выдает ошибку – undeclared identifier FindKey. В чем проблема?
Может кто - то подскажет другой способ создания уникального номера для записи. Буду благодарна за помощь.

Последний раз редактировалось artemavd; 03.12.2012 в 17:37.
puma вне форума Ответить с цитированием
Старый 03.12.2012, 13:55   #2
xoodoo
Форумчанин
 
Регистрация: 11.04.2012
Сообщений: 212
По умолчанию

Цитата:
другой способ создания уникального номера для записи
Сделай поле ID автоинкрементным и укажи Access'у что это поле является первичным ключем.
xoodoo вне форума Ответить с цитированием
Старый 03.12.2012, 14:45   #3
puma
Пользователь
 
Регистрация: 22.04.2008
Сообщений: 23
По умолчанию

Сделала, дополнительное поле id автоинкрементным, с первичным ключем все равно ругается, та же ошибка...
puma вне форума Ответить с цитированием
Старый 03.12.2012, 14:56   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Для автоинкремента и не надо программно ключ формировать, он автоматически создается при вставке новой записи.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.12.2012, 15:11   #5
puma
Пользователь
 
Регистрация: 22.04.2008
Сообщений: 23
По умолчанию

Я понимаю, что автоинкрементное поле создает автоматически новую запись с номером. Может я неправильно объяснила поставленную задачу.

Суть задачи в чем: каждый новый год в электронный каталог нужно вносить читателя, запись читателя должна вносится автоматически, 1, 2.... 15. и т.д.

Со следующего года приходят новые читатели и остаются старые, следовательно должна быть перерегистрация старых и внесение в электронный каталог новых.
Автоинкрементное поля для этого не подходит, т. к при удалении записи нарушается счет, поэтому и пробовала создавать новую таблицу для занесения уникального номера под которым можно вставить запись читателя в таблицу.
Аналог моего примера - http://www.sd-company.su/sd_base_xp/.../delphi_id.php.

Последний раз редактировалось puma; 03.12.2012 в 15:27.
puma вне форума Ответить с цитированием
Старый 03.12.2012, 15:36   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

IDTable.FindKey([Name])
IDTable какого типа? Не у всех таких компонент есть метод FindKey
Name - где определено, какое значение? Вообще-то здесь по вашей логике должно быть имя таблицы, что-нибудь наподобие 'Table1'
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.12.2012, 15:53   #7
puma
Пользователь
 
Регистрация: 22.04.2008
Сообщений: 23
По умолчанию

IDTable - это дополнительная таблица а Name - это поле в таблице
puma вне форума Ответить с цитированием
Старый 03.12.2012, 16:05   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
дополнительная таблица
Такого типа не знаю. Есть TTable, TADOTable и другие
Цитата:
Name - это поле в таблице
При каких делах? Должно быть значение поля, по которому FindKey ищет запись
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.12.2012, 16:22   #9
puma
Пользователь
 
Регистрация: 22.04.2008
Сообщений: 23
По умолчанию

Не могу понять.... Подскажите, пожалуйста как правильно реализовать поиск и внести запись с уникальным id....
puma вне форума Ответить с цитированием
Старый 03.12.2012, 17:48   #10
xoodoo
Форумчанин
 
Регистрация: 11.04.2012
Сообщений: 212
По умолчанию

Цитата:
нарушается счет
Первичный ключ он не для "счета" нужен, а для однозначной идентификации записи.
А для идентификации совершенно неважно по порядку ли идут идентификационные номера - главное чтобы они были уникальны в пределах таблицы. Именно за это и будет отвечать поле ID, созданное как первичный ключ. Автоинкремент лишь облегчит генерацию уникального значения ключа, ибо он осуществляется вне контекста транзакций.
xoodoo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с созданием новой записи Malgor БД в Delphi 1 16.07.2012 08:25
Создание кнопки для сохранения записи Dmitriy_Egorov Microsoft Office Access 11 29.09.2011 23:19
Создание новой записи в подчиненной форме serega1576 Microsoft Office Access 2 16.09.2011 05:56
Как получить ID для новой записи с использованием триггеров?(Firebird) Paul Hindenburg БД в Delphi 20 01.06.2008 16:39
Создание новой записи Gerox БД в Delphi 3 30.12.2007 14:22