Страница 1 из 1
Ошибка при вставке записи
Добавлено: 09 янв 2008, 15:28
ARCHANGEL_SG
Использую Interbase 7.5 и Builder2006
При попытке вставить запись в таблицу через IBQuery выскакивает ошибка Interbase:
violation of PRIMARY or UNIQUE KEY constraint "INTEG_6" on table "LIST"
Вот структура таблиц:
create table extension(
Nume int Not Null Primary Key,
Ext char(5) Not Null,
Prog char(100) Not Null
);
create table list(
Numf int Not Null Primary Key,
Nume int Not Null,
Namef char(100) Not Null,
pathf char(255) Not Null,
sizef int Not Null,
datef char(20) Not Null,
FOREIGN KEY (Nume) REFERENCES extension
);
Подскажите, пожалуйста, как правильно вставлять записи
Добавлено: 09 янв 2008, 15:41
Dimitry Sibiryakov
Правильный способом является использование кляузы INSERT INTO.
Правильным методом работы с TIBQuery является его выкидываение в топку.
Добавлено: 09 янв 2008, 15:48
ARCHANGEL_SG
Dimitry Sibiryakov писал(а):Правильный способом является использование кляузы INSERT INTO.
Правильным методом работы с TIBQuery является его выкидываение в топку.
Попробовал вставлять отфонарные данные:
Insert Into list (Numf, Nume, Namef, pathf, sizef, datef) Values(1, 2, 'proba', 'put', 23, '435')
Ошибка таже
Попробавал через Interactive SQL - запись вставляется!
Выкинул TIBQuery в топку

и попробовал через процедуры, ошибка повторилась
Добавлено: 09 янв 2008, 17:41
kdv
1. рекомендуется именовать constraint PK, UNIQUE и FK.
т.е. писать не как в вопросе, а
create table x(
id int not null,
...,
constraint PK_X primary key (ID));
тогда не будут выдаваться INTEG ...
2. IBQuery выкидывать никуда не надо. Это IBTable - надо.
3. в foreign key желательно указывать и имя таблицы, и имя столбца на который ссылается FK. Т.е. не references extension а references extension(Nume)
4. перед тем как вставить что-нибудь в LIST, надо что-нибудь добавить и в EXTENSION. В частности, там должна быть запись с nume = 2.
Добавлено: 10 янв 2008, 16:18
ARCHANGEL_SG
Спасибо, изменил согласно рекомендациям:
create table extension(
Nume int Not Null,
Ext varchar(5) Not Null,
Prog varchar(100) Not Null,
constraint PK_extension primary key (Nume)
);
create table list(
Numf int Not Null Primary Key,
Nume int Not Null,
Namef varchar(255) Not Null,
pathf varchar(255) Not Null,
sizef float Not Null,
datef varchar(20) Not Null,
FOREIGN KEY (Nume) REFERENCES extension (Nume)
);
Данные вставляются, но если передаю через параметры, то опять ошибка INTEG_11
Если вставляю через процедуру, то вставка вроде как происходит, но при попытке просмотреть таблицу или повторно запустить программу выдается ошибка:
Arithmetic exception, numeric overflow, or string truncation.
Cannot transliterate character between character sets.
Добавлено: 10 янв 2008, 18:11
kdv
но если передаю через параметры, то опять ошибка INTEG_11
задрал, честное слово. я же написал - И ПК, и ФК, и UNIQUE!!!
то есть не
FOREIGN KEY (Nume) REFERENCES extension (Nume)
а
constraint FK_LIST_TO_EXTENSION FOREIGN KEY (Nume) REFERENCES Extension (Nume)
и если у extension ПК поименовал, почему не поименовал у LIST ???
вообще ошибка FK говорит о том, что соответствующей справочной записи в Extension нет. Ферштейн?

А ошибка ПК - что запись с таким ПК уже есть.
Cannot transliterate character between character sets.
замечательно.
www.ibase.ru/devinfo/ibrusfaq.htm читал?
Добавлено: 11 янв 2008, 08:29
stix-s
kdv писал(а):
constraint FK_LIST_TO_EXTENSION FOREIGN KEY (Nume) REFERENCES Extension (Nume)
Я так понимаю, что проблема с правами при длине имени объекта свыше 27 символов исправлена?
а то я до сих пор названия ужимаю до 26 символов
ЗЫ:
http://forum.ibase.ru/phpBB2/viewtopic. ... 0%E0%E2%E0
Добавлено: 11 янв 2008, 16:51
Dimitry Sibiryakov
Вообще-то тут самое длинное имя - это имя самого констрейна, и оно всего 20 символов. Не помню, чтобы были права на констрейны...
Добавлено: 11 янв 2008, 17:46
kdv
Я так понимаю, что проблема с правами при длине имени объекта свыше 27 символов исправлена?
мы тут, как бы, про InterBase, у которого с 7.0 длина имен объектов до 67 символов.
кроме того,
1. в FB если я правильно помню не исправлена, или надо смотреть 2.03
2. имя, которое я привел, вряд-ли больше 25 символов. это видно даже на глаз.
Добавлено: 13 янв 2008, 14:38
Кузнецов Евгений
Доброго времени суток!
stix-s писал(а):
Я так понимаю, что проблема с правами при длине имени объекта свыше 27 символов исправлена?
Планируется исправить в 2.5:
http://tracker.firebirdsql.org/browse/CORE-479
Добавлено: 13 янв 2008, 21:57
ARCHANGEL_SG
Большое спасибо kdv за помощь

. Проблема оказалась в вставке записей с русской кодировкой. Прописал UNICODE_FSS, при создании базы, конекте и в параметрах процедуры.
Добавлено: 14 янв 2008, 09:47
stix-s
Dimitry Sibiryakov писал(а):Вообще-то тут самое длинное имя - это имя самого констрейна, и оно всего 20 символов. Не помню, чтобы были права на констрейны...
Да, здесь FK и короткий, меня интересовал общий случай, мало ли, вдруг поправили.
kdv писал(а):
мы тут, как бы, про InterBase, у которого с 7.0 длина имен объектов до 67 символов.
Сорь, что не указал, что спрашивал про FB
Кузнецов Евгений писал(а):
Планируется исправить в 2.5
сенкс, буду верить и ждать

Добавлено: 14 янв 2008, 10:23
kdv
Прописал UNICODE_FSS
юникод тут был ни при чем.