:: Архив конференции по VFP до 2005 года
удаление записи при primery Key
vic38
Автор
Подскажите новичку
База данных, в ней таблица custom.dbf имеет primery Key. После удаления записи не удается добавить новую запись в таблицу,- выдается соощение об ошибке – нарушение уникальности индекса.

П о м о г и т е плиз
Спасибо всем кто ответит. Семеныч
Best regards,
vic mailto:hvitas38@mail.ru
Ratings: 0 negative/0 positive
Re: удаление записи при primery Key
Mavy

Сообщений: 246
Дата регистрации: 04.08.2004
Наверно ты добавляешь запись с тем же значением Primery key, что и в только что удаленной. Такое не ройдет, т к ты наверняка удаляешь командой DELETE, а это не физическое удаление, а только пометка об удалении.
ЗЫ Приведи кусочек кода, если я не о том...



Отредактировано (12.03.05 09:41)


------------------
Ratings: 0 negative/0 positive
Re: удаление записи при primery Key
matod

Сообщений: 3062
Откуда: Иркутск
Дата регистрации: 31.10.2001
Mavy прав, причина скорее всего в том, что ты пытаешься добавить запись с значением ключа которое уже есть в таблице, хотя и удаленное. IMHO самое правильное - генерировать заведомо неповторяющиеся значения. Например, используя дополнительную таблицу для хранения последнего значения и увеличивая каждый раз это значение на 1.
Много интересного о генерации уникальных значений можно найти на этом сайте, воспользовавшись поиском, а так же в разделе База Знаний.
Ratings: 0 negative/0 positive
Re: удаление записи при primery Key
Guest_Petrov
INDEX TAG ... FOR !Deleted() Так или по типу того короче фильтр установи.
Ratings: 0 negative/0 positive
Re: удаление записи при primery Key
Владимир Максимов

Сообщений: 14095
Откуда: Москва
Дата регистрации: 02.09.2000
Цитата:
INDEX TAG ... FOR !Deleted() Так или по типу того короче фильтр установи.
А вот этого делать ни в коем случае не надо! Это же Primary-индекс! Такие индексы (с FOR-условием) не участвуют в оптимизации.

Вообще-то, надо написать корректную функцию генерации значения ключа. Не надо использовать значение ключа ранее удаленных записей. Ни в коем случае не генерить ключ как MAX()+1! Это верный путь создания себе проблем.

Обычно создают служебную табличку, которая хранит код последнего использованного (или первого НЕ использованного) значения ключа для каждой таблицы. Когда надо получить очередное значение ключа обращаются к этой служебной таблице, наращивая сохраненное в этой таблице значение.

Сделай поиск по этому форуму по ключевому слову NewID. Также можешь посмотреть стандартный проект примеров Solution.pjx (в нем форму NewId). Если версия VFP 8 и выше, то используй для ключевого поля Integer(Autoincrement)
Ratings: 0 negative/0 positive
Re: удаление записи при primery Key
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi, Владимир!

Цитата:
Цитата:
INDEX TAG ... FOR !Deleted() Так или по типу того короче фильтр установи.
А вот этого делать ни в коем случае не надо!
Ситуации разные бывают... Например связи типа 1-к-0-или-1 - где PK не генерируются, а берутся из другой таблицы. Хотя конечно в ДАННОМ случае скорее всего неверный аглоритм получения ID виноват (возможно вообще прямой ввод кода )
Цитата:
Это же Primary-индекс! Такие индексы (с FOR-условием) не участвуют в оптимизации.
Это не страшно - можно REGULAR индекс завести параллельно - если уж объём большой и скорость пострадала... Т.е. смысл такого индекса - исключительно в контроле дубликатов среди неудалённых записей.




------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 7 (Гостей: 7)

© 2000-2024 Fox Club 
Яндекс.Метрика