Страница 1 из 1

Не добавляется запись в таблицу

Добавлено: 09 июн 2005, 10:37
sim
gal711 MSSQL
С некоторого времени стало невозможно (MSSQL-ем) добавить записи в таблицу партий. Из Галактики - добавляются, а самим MSSQL-ем - нет. Выдается сообщение о дублировании ключа в нулевом индексе. Дословно:
Cannot insert duplicate key row in object 'T$KATPARTY' with unique index 'T$KATPARTY0'
Где тут собака порылась?

Добавлено: 09 июн 2005, 11:29
Max_Fin
случаем в nrec 0 пишите?

Добавлено: 09 июн 2005, 11:38
sim
select * from t$katparty where f$kod='9999999'
insert into t$katparty(f$kod,f$name)
select '9999999','9999999'
select * from t$katparty where f$kod='9999999'
delete t$katparty where f$kod='9999999'
select * from t$katparty where f$kod='9999999'

Добавлено: 09 июн 2005, 11:38
WiRuc
Это значит, что в таблице есть запись с F$NREC=0x8000000000000000 (NULL в понимании Галактики). Галактика при вставке заранее генерит новый NREC, а при вставке с помощью EM генерацией NREC занимается триггер, т.е. сначала вставляется запись с NREC=0x8000000000000000, а затем для нее генериться новый NREC. Кстати, именно поэтому в Галактике невозможна массовая вставка записей, только по одной можно вставлять. У вас в результате сбоя образовалась запись с NREC=0x8000000000000000 и поэтому теперь невозможно вставить новую. Удалите сбойную запись и все будет хорошо :D
Кстати, еще бывают ситуации, когда на какой-то одной машине перестают генериться NREC для записей вставляемых не из Галактики. В этом случае помогает перезагрузка этой машины и запуск на ней Галактики с созданием записи в той таблице для которой перстали генериться NREC.

Добавлено: 09 июн 2005, 11:45
Max_Fin
ну вот, а кто значение nrec генерить будет? только вы сами!

Добавлено: 09 июн 2005, 12:07
sim
Всем спасибо! За ликбез :wink:
Max_Fin писал(а):ну вот, а кто значение nrec генерить будет? только вы сами!
А как будет выглядеть эта строчка? :?

Добавлено: 09 июн 2005, 15:26
WiRuc
Max_Fin писал(а):ну вот, а кто значение nrec генерить будет? только вы сами!
Еще раз :D
При внешнем доступе к таблице за генерацию NREC отвечает триггер и в обычной ситуации все работает. Можно, конечно, и самостоятельно генерить NREC перед вставкой. Чтобы понять как это делается нужно посмотреть код триггера на вставку для какой-либо таблицы.

Добавлено: 14 июн 2005, 17:38
ecasoft
В данном каталоге всегда разные проблемы при вставках..модификациях и т.д., потому что
полей уникальных тьма (надо вообще за такие вещи голову разработчику оторвать - ведь нигде в других талицах такого нет) - это и код и имя..вообщем посмотрите словарь и выполните все условия по уникальности ВСЕХ уникальных полей.