Ошибка при вставке записи
-
- Сообщения: 4
- Зарегистрирован: 09 янв 2008, 14:50
Ошибка при вставке записи
Использую 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
);
Подскажите, пожалуйста, как правильно вставлять записи
При попытке вставить запись в таблицу через 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
);
Подскажите, пожалуйста, как правильно вставлять записи
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
-
- Сообщения: 4
- Зарегистрирован: 09 янв 2008, 14:50
Dimitry Sibiryakov писал(а):Правильный способом является использование кляузы INSERT INTO.
Правильным методом работы с TIBQuery является его выкидываение в топку.
Попробовал вставлять отфонарные данные:
Insert Into list (Numf, Nume, Namef, pathf, sizef, datef) Values(1, 2, 'proba', 'put', 23, '435')
Ошибка таже
Попробавал через Interactive SQL - запись вставляется!
Выкинул TIBQuery в топку и попробовал через процедуры, ошибка повторилась
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.
т.е. писать не как в вопросе, а
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.
-
- Сообщения: 4
- Зарегистрирован: 09 янв 2008, 14:50
Спасибо, изменил согласно рекомендациям:
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.
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.
задрал, честное слово. я же написал - И ПК, и ФК, и UNIQUE!!!но если передаю через параметры, то опять ошибка INTEG_11
то есть не
FOREIGN KEY (Nume) REFERENCES extension (Nume)
а
constraint FK_LIST_TO_EXTENSION FOREIGN KEY (Nume) REFERENCES Extension (Nume)
и если у extension ПК поименовал, почему не поименовал у LIST ???
вообще ошибка FK говорит о том, что соответствующей справочной записи в Extension нет. Ферштейн? А ошибка ПК - что запись с таким ПК уже есть.
замечательно. www.ibase.ru/devinfo/ibrusfaq.htm читал?Cannot transliterate character between character sets.
Я так понимаю, что проблема с правами при длине имени объекта свыше 27 символов исправлена?kdv писал(а): constraint FK_LIST_TO_EXTENSION FOREIGN KEY (Nume) REFERENCES Extension (Nume)
а то я до сих пор названия ужимаю до 26 символов
ЗЫ:
http://forum.ibase.ru/phpBB2/viewtopic. ... 0%E0%E2%E0
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
мы тут, как бы, про InterBase, у которого с 7.0 длина имен объектов до 67 символов.Я так понимаю, что проблема с правами при длине имени объекта свыше 27 символов исправлена?
кроме того,
1. в FB если я правильно помню не исправлена, или надо смотреть 2.03
2. имя, которое я привел, вряд-ли больше 25 символов. это видно даже на глаз.
-
- Сообщения: 144
- Зарегистрирован: 16 фев 2006, 22:36
Доброго времени суток!
Планируется исправить в 2.5: http://tracker.firebirdsql.org/browse/CORE-479stix-s писал(а): Я так понимаю, что проблема с правами при длине имени объекта свыше 27 символов исправлена?
-
- Сообщения: 4
- Зарегистрирован: 09 янв 2008, 14:50
Да, здесь FK и короткий, меня интересовал общий случай, мало ли, вдруг поправили.Dimitry Sibiryakov писал(а):Вообще-то тут самое длинное имя - это имя самого констрейна, и оно всего 20 символов. Не помню, чтобы были права на констрейны...
Сорь, что не указал, что спрашивал про FBkdv писал(а): мы тут, как бы, про InterBase, у которого с 7.0 длина имен объектов до 67 символов.
сенкс, буду верить и ждатьКузнецов Евгений писал(а): Планируется исправить в 2.5