Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при добавлении записи в таблицу Interbase


Страницы:   1 2

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 BEGIN
NEW.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]

нет. кажется проблема была именно с версиями записи. по другому объяснить не получается


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо