![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 20.05.2008
Сообщений: 9
|
![]()
Помогите пожалуйста!!!Есть БД (ms Access), тип уникального ключа счетчик. Пишу прогу на Делфи. Нужно сделать следующее. Вот у меня при добавлении записи идет увеличение ключа на единицу, т.е 1,2,3.Если я удалю запись под ключом 1, у меня останутся записи 2,3. После этого, если я добавлю новую запись, то у нее уникальный ключ будет равен 4, а мне нужно что бы он был равен 1. Т.е, как бы "дырку" надо найти,т.е что бы не наращивался дальше ключ.(мне это нужно, что бы не были очень большие числа.)Добавляю запись при нажатии на кнопку.Помогите пожалуйста...
И подскажите откуда можно скачать картинки на кнопочки (а то,которые в делфи стандартные мне не нравятся=)))
Когда программист ложится спать,он ставит рядом с собой два стакана- первый с водой(на случай если он захочет пить),второй пустой(если не захочет)=))
Последний раз редактировалось spiteful41; 20.05.2008 в 02:41. |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 10.11.2007
Сообщений: 38
|
![]()
Организуешь цикл по количеству элементов в БД. Проверяешь в этом цикле, есть ли уже ключ с таким номером в базе. Если нету - вставляешь.
|
![]() |
![]() |
![]() |
#3 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 20.05.2008
Сообщений: 9
|
![]()
мне нужно будет потом искать запись по ключу,тем более ключ в отчете отображается,а здоровые числа вводить не удобно и не красиво выглядит
так не получится,сравнивать не с чем,мне надо новой записи присвоить номер подходящей "самой первой дырки"
Когда программист ложится спать,он ставит рядом с собой два стакана- первый с водой(на случай если он захочет пить),второй пустой(если не захочет)=))
Последний раз редактировалось Stilet; 22.05.2008 в 09:13. |
![]() |
![]() |
![]() |
#5 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
У тебя по любому получается что ключ записей равен RecNo, так зачем по нему искать? Я бы так не делал.
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 31.10.2007
Сообщений: 103
|
![]()
Уникальный ключ так и называется потомучто не поторяется никогда.
Но уж если так необходимо тогда тип поля уникальног ключа надо делать не "счетчик" а "длинное целое". Писать что-то вроде сиквенсов т.е. процедура которая перед возвращением следующего значения ID проверяет есть ли дыры т.е. 'Select Count(ID) AS NOM FROM Table' = 'Select top 1 id as NOM from table order by id desc' и если не равно то находит дыру. Но если как ты говориш числа огромные то не думаю что тебя спасет это от длинных номеров. Для чего отоброжать ID в отчете? он является инвентарным номером чего-то? Для поиска минимальной дыры лучше не создавать цикл по количеству элементов БД, слишком долго. Я бы сделал так Если есть дыры догда vCount = 'SELECT Count(ID) AS KolID FROM Table'!NOM vCount = vCount/2 MaxID = 'SELECT TOP <vCount> id FROM Table Order by id'!id Если MaxID > vCount тогда двигаешся в меньшую сторону на половину от vCount (vCount = vCount/2), если равно то в большую. И так до тех про пока у тебя не получится vCount(i-1) = MaxCount а vCount(i+1) < MaxCount, т.е. vCount(i) и будет твоей дырой (т.е. vCount должно быть = 1) Если vCount/2 дробное округляешь в большую сторону Последний раз редактировалось AlexandrSid; 22.05.2008 в 10:22. |
![]() |
![]() |
![]() |
#8 |
Регистрация: 20.05.2008
Сообщений: 9
|
![]()
Всем огромное спасибо за помощь!!!
Когда программист ложится спать,он ставит рядом с собой два стакана- первый с водой(на случай если он захочет пить),второй пустой(если не захочет)=))
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Уникальность по 3 полям | num8er | БД в Delphi | 3 | 09.10.2007 09:54 |