Ошибка при вставке записи

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
ARCHANGEL_SG
Сообщения: 4
Зарегистрирован: 09 янв 2008, 14:50

Ошибка при вставке записи

Сообщение ARCHANGEL_SG » 09 янв 2008, 15:28

Использую 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

);

Подскажите, пожалуйста, как правильно вставлять записи

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 09 янв 2008, 15:41

Правильный способом является использование кляузы INSERT INTO.
Правильным методом работы с TIBQuery является его выкидываение в топку.

ARCHANGEL_SG
Сообщения: 4
Зарегистрирован: 09 янв 2008, 14:50

Сообщение ARCHANGEL_SG » 09 янв 2008, 15:48

Dimitry Sibiryakov писал(а):Правильный способом является использование кляузы INSERT INTO.
Правильным методом работы с TIBQuery является его выкидываение в топку.
:)
Попробовал вставлять отфонарные данные:
Insert Into list (Numf, Nume, Namef, pathf, sizef, datef) Values(1, 2, 'proba', 'put', 23, '435')
Ошибка таже

Попробавал через Interactive SQL - запись вставляется!

Выкинул TIBQuery в топку :D и попробовал через процедуры, ошибка повторилась

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 09 янв 2008, 17:41

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.

ARCHANGEL_SG
Сообщения: 4
Зарегистрирован: 09 янв 2008, 14:50

Сообщение ARCHANGEL_SG » 10 янв 2008, 16:18

Спасибо, изменил согласно рекомендациям:
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.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 10 янв 2008, 18:11

но если передаю через параметры, то опять ошибка 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 читал?

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 11 янв 2008, 08:29

kdv писал(а): constraint FK_LIST_TO_EXTENSION FOREIGN KEY (Nume) REFERENCES Extension (Nume)
Я так понимаю, что проблема с правами при длине имени объекта свыше 27 символов исправлена?
а то я до сих пор названия ужимаю до 26 символов :(

ЗЫ:
http://forum.ibase.ru/phpBB2/viewtopic. ... 0%E0%E2%E0

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 11 янв 2008, 16:51

Вообще-то тут самое длинное имя - это имя самого констрейна, и оно всего 20 символов. Не помню, чтобы были права на констрейны...

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 11 янв 2008, 17:46

Я так понимаю, что проблема с правами при длине имени объекта свыше 27 символов исправлена?
мы тут, как бы, про InterBase, у которого с 7.0 длина имен объектов до 67 символов.
кроме того,
1. в FB если я правильно помню не исправлена, или надо смотреть 2.03
2. имя, которое я привел, вряд-ли больше 25 символов. это видно даже на глаз.

Кузнецов Евгений
Сообщения: 144
Зарегистрирован: 16 фев 2006, 22:36

Сообщение Кузнецов Евгений » 13 янв 2008, 14:38

Доброго времени суток!
stix-s писал(а): Я так понимаю, что проблема с правами при длине имени объекта свыше 27 символов исправлена?
Планируется исправить в 2.5: http://tracker.firebirdsql.org/browse/CORE-479

ARCHANGEL_SG
Сообщения: 4
Зарегистрирован: 09 янв 2008, 14:50

Сообщение ARCHANGEL_SG » 13 янв 2008, 21:57

Большое спасибо kdv за помощь :D . Проблема оказалась в вставке записей с русской кодировкой. Прописал UNICODE_FSS, при создании базы, конекте и в параметрах процедуры.

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 14 янв 2008, 09:47

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 14 янв 2008, 10:23

Прописал UNICODE_FSS
юникод тут был ни при чем.

Ответить