![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при добавлении записи в таблицу Interbase
sashag © (2003-07-30 09:38:00)Ири выполнении "insert into table1 (name) values "aaa""
возникает ошибка
"violation of PRIMARY or UNIQUE KEY constraint "INTEG_13" on table "TABLE1""
Таблица имеет структуру
(id INTEGER NOT NULL,
name CHAR(50),
( id)Ири выполнении "insert into table1 (name) values "aaa""
возникает ошибка
"violation of PRIMARY or UNIQUE KEY constraint "INTEG_13" on table "TABLE1""
Таблица имеет структуру
(id INTEGER NOT NULL,
name CHAR(50),
PRIMARY KEY(id))
Поле id - автоинкрементное (триггер со счетчиком)
Не могу понять причину этой ошибки. Может, кто встречался с таким?
Zacho (2003-07-30 12:04:00) [1]
> stud © (30.07.03 11:58)
Можешь и расписать в отдельной ветке, но если уже решил и во всем разобрался, то зачем ?
stud (2003-07-30 11:58:00) [2]
ну я не подробно описываю проблему. если есть желание могу отдельно расписать))))
Zacho (2003-07-30 11:14:00) [3]
> stud © (30.07.03 11:07)
А все это потому, что при работе с гридом, следующее значение генератора надо было получать в приложении, а не в триггере, и соответственно заполнять ПК тоже из приложения.
А версионность здесь все-таки абсолютно ни причем.
stud (2003-07-30 11:07:00) [4]
вообще речь шла о том, что значение генератора подставляется в поле тригером. new.f1=
и просто я столкнулся с тем, что у меня при работе с гридом вместо одной строки отображалось две, относящиеся к одной и той же записи....
в общем я этим я разобрался
sashag (2003-07-30 11:06:00) [5]
>Zacho
Тип поля NUMERIC(18, 0) нужен потому, что записи при нормальной работе приложения будут добавляться в больший количествах.
> ALL
Кстати, спасибо всем за помощь - я понял, где проблема, и главное - ПОЧЕМУ она возникла.
Дело в том, что я переписываю программу, ранее работавшую с таблицами Paradox, на Interbase. Естественно, что БД уже заполнена, и пришлось импортировать ее в Interbase. А начальные значения счетчиков я установил в 0!!! Во отсюда все и пошло...
Zacho (2003-07-30 10:58:00) [6]
Нет, у генератора в IB6, насколько помню, тип INT64.
А переполнение, в принципе, вполне могло быть, хотя и очень маловероятно, что ты успел в эту таблицу вставить больше 2^64 записей.
sashag (2003-07-30 10:46:00) [7]
Кстати, тип поля id у меня не INTEGER, а NUMERIC(18, 0) - чтобы "больше влезло". Это не может быть причиной неправильной работы счетчика?
Zacho (2003-07-30 10:45:00) [8]
> sashag © (30.07.03 10:41)
Да не какая это в данном случае не причина. А про многоверсионность записей и прочее читай статьи на http://www.ibase.ru/develop.htm
sashag (2003-07-30 10:41:00) [9]
Я не очень хорошо знаю Interbase, поэтому не понимаю, что такое "многоверсионность полей". Может, это тоже причина, просто я не могу определить?
Zacho (2003-07-30 10:35:00) [10]
> stud © (30.07.03 10:32
Ну и какое отношение версионность имеет к генераторам ?
stud (2003-07-30 10:32:00) [11]
автоматически?
такого быть не должно!!!
to Zacho
при чем генератор?? многоверсионность полей
Zacho (2003-07-30 10:30:00) [12]
> sashag © (30.07.03 10:27)
А просто не должно такого быть. Не может генератор сам по себе изменить значение. По крайней мере, я такого не разу не видел.
sashag (2003-07-30 10:27:00) [13]
-> stud
Теперь вручную можно изменить, но если это повторится при работе приложения у заказчика и с другой таблицей?
Как исправлять эту ошибку автоматически?
Zacho (2003-07-30 10:27:00) [14]
> stud © (30.07.03 10:15)
Не бывает такого. У генератора нет никаких версий.
> sashag © (30.07.03 10:21)
Все нормально, но советую обратить внимание на Соловьев © (30.07.03 10:11) - тебе вполне может понадобиться получать новое ID в приложении, а не в триггере. Читай http://www.ibase.ru/devinfo/generator.htm
В общем, похоже, что кто-то (или что-то) просто установил значение генератора на одно из предидущих. Как это могло произойти - тебе лучше знать.
stud (2003-07-30 10:22:00) [15]
инзмени значение генератора.
set generator table1_gen to 49
sashag (2003-07-30 10:21:00) [16]
Текст триггера
CREATE TRIGGER"TRG_TABLE1" FOR"TABLE1"
ACTIVE BEFORE INSERT POSITION 0
AS BEGINNEW.ID= GEN_ID(Table1_GEN, 1);
END
Zacho (2003-07-30 10:20:00) [17]
> sashag © (30.07.03 10:16)
Приведи текст триггера.
sashag (2003-07-30 10:20:00) [18]
Есть какой-то способ исключить такие ситуации?
sashag (2003-07-30 10:16:00) [19]
Действительно, максимальный ID = 48, а значение счетчика - 12...
Как такое может быть? Может, триггер глючит?
stud (2003-07-30 10:15:00) [20]
нет. кажется проблема была именно с версиями записи. по другому объяснить не получается