Meb
Дата: 06.09.2005 10:53:03
В базе есть таблица CCustomNSItems со следующими полями: CustomNSItemID (индексированное ключевое поле, совпадения не допускаются, тип данных "счетчик"), ExpID, CustomID, ProtoID, ItemName, Cnt, ItemSort, Price, ToSheme, Top. Эта таблица заполняется следующим запросом:
INSERT INTO CCustomNSItems ( ExpID, CustomID, ProtoID, ItemName, Cnt, ItemSort, Price, ToSheme, [Top] )
SELECT [ICustomNSItems].[CustomNSItemID], [CCustoms].[CustomID], [ICustomNSItems].[ProtoID], [ICustomNSItems].[ItemName], [ICustomNSItems].[Cnt], [ICustomNSItems].[ItemSort], [ICustomNSItems].[Price], [ICustomNSItems].[ToSheme], [ICustomNSItems].[Top]
FROM ICustomNSItems INNER JOIN CCustoms ON ICustomNSItems.CustomID = CCustoms.OldCustomID;
С некоторых пор этот запрос перестал работать, возникает ошибка: "нарушение уникальности ключа". По идее, при вставке данных должна добавляться строка, а в поле CustomNSItemID генериться новое значение. А на практике запрос пытается вставить записи с ранее использованными значениями счетчика CustomNSItemID (проверял, сделав поле CustomNSItemID не ключевым). Может кто объяснит как с этим бороться?
Meb
Дата: 06.09.2005 11:16:21
При попытке добавить строку в таблицу вручную, счетчик действительно выдает значение уже занятое. А из-за чего счетчик полетел? База раньше была в Access97 там такого не наблюдалось. Может это из-за автосжатия при закрытии? Как добиться того, чтобы ошибка не появлялясь вновь?
Meb
Дата: 06.09.2005 11:44:39
Да, нашел свою тему:
http://www.sql.ru/forum/actualthread.aspx?tid=108865&hl=%f1%e1%ee%e9+%f1%f7%e5%f2%f7%e8%ea%e0
Похоже Access глюкавит. И скорее всего сбой связан с автосжатием баз при выходе (Access 2003). Так как эта база не один год работал на Access 97 и ни разу подобных проблем не было (сжималась она довольно редко и в "опустошенном" состоянии).