Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.14;
Скачать: CL | DM;

Вниз

master-detail   Найти похожие ветки 

 
Xmen   (2005-07-04 09:59) [0]

Привет всем!!!
Вот хотел сделать связь master-detail, вроде бы получилось связь установлен и когда ввожу данные то все ОК но когда хотел сохранить данные даёт ошибку "violation of foregn key constraint "FK_DATA2" on table "DATA2".
Кто небуд сталкивался с такой проблемой?
Для того чтобы был понятнее могу выслать код с базой. Вчера с утра до вечера посидел решая эту проблему, но никак не вышло. Как можно сделат связь правилно. Если можно дайти простой пример. В хелпах Делфи покапался, но непонял.


 
Johnmen ©   (2005-07-04 10:05) [1]

Если уж и в хелпах не понял, то давание простого примера не поможет...:)


 
Stakan ©   (2005-07-04 10:10) [2]

В подчинённой таблице в поле, по которому связь с родительской, должно быть значение поля из родительской таблицы (то поле, которое указано во внешнем ключе).
Например:
ALTER TABLE DATA1 ADD CONSTRAINT FK_DATA2 FOREIGN KEY (DATA2_ID) REFERENCES DATA2 (ID)
Это значит, что в таблице DATA1 в поле DATA2_ID должно быть значение из поля ID таблицы DATA2


 
Xmen   (2005-07-04 11:28) [3]

2Johnmen ©   (04.07.05 10:05) [1]

Если уж и в хелпах не понял, то давание простого примера не поможет...:)
Проста в  ..DB\IBX\.. примеры сложные на первы раз(может для меня). Поэтому нужен простой пример.

2Stakan ©
у меня база такая:
CREATE TABLE MAIN (
   ID      INTEGER,
   ZNACH1  INTEGER,
   ZNACH2  VARCHAR(10)
);
ALTER TABLE MAIN ADD CONSTRAINT PK_MAIN PRIMARY KEY (ID);

CREATE TABLE DATA1 (
   DATA1_ID  INTEGER,
   ZNACH1    INTEGER,
   ZNACH2    VARCHAR(10)
);

ALTER TABLE DATA1 ADD CONSTRAINT FK_DATA1 FOREIGN KEY (DATA1_ID) REFERENCES MAIN (ID) ON DELETE CASCADE ON UPDATE CASCADE;

Может в проге ошибка, может посмотрите код?


 
Digitman ©   (2005-07-04 11:31) [4]


> Кто небуд сталкивался с такой проблемой?


Кто Небуд - он точно сталкивался.
Он с чем только не сталкивался


 
Ярослав   (2005-07-04 11:33) [5]

А когда вносишь запись в подчиненную таблицу, ID главной ей не забываешь присваивать?


 
Stakan ©   (2005-07-04 11:33) [6]

Xmen   (04.07.05 11:28) [3]
А почему в таблице DATA1 нет первичного ключа?
И зачем on update cascade? Ты что собираешся менять перв. ключ в MAIN?


 
Ярослав   (2005-07-04 11:35) [7]

>> Stakan ©   (04.07.05 11:33) [6]
??? Причем тут это?


 
Stakan ©   (2005-07-04 11:39) [8]

Ярослав   (04.07.05 11:35) [7]
Это я не про ошибку, а вообще.
Про ошибку я уже сказал, очевидно, что при добавлении в табл. DATA1, DATA1_ID не совпадает ни с одним ID из табл. MAIN


 
Xmen   (2005-07-04 11:52) [9]

2Ярослав   (04.07.05 11:33) [5]

А когда вносишь запись в подчиненную таблицу, ID главной ей не забываешь присваивать?

В проги для этого делаю
procedure TForm1.qrData1NewRecord(DataSet: TDataSet);
begin
 qrData1["Data1_id"]:=qrMain["id"];
end;


 
Ярослав   (2005-07-04 11:53) [10]

>> Stakan ©   (04.07.05 11:39) [8]
Ну тогда понятно


 
Anatoly Podgoretsky ©   (2005-07-04 11:54) [11]

Stakan ©   (04.07.05 11:33) [6]
Что тебя так сильно испугало?


 
Stakan ©   (2005-07-04 11:58) [12]

Anatoly Podgoretsky ©   (04.07.05 11:54) [11]
ИМХО не стоит так делать.


 
Ярослав   (2005-07-04 12:08) [13]

>> Xmen   (04.07.05 11:52) [9]
Интересно в определении таблиц у тебя ни слова о DATA2 а в ошибке
violation of foregn key constraint "FK_DATA2" on table "DATA2"
в общем какую то  DATE2 таблицу упоминает...
Может ты чего то не договариваешь?


 
Anatoly Podgoretsky ©   (2005-07-04 12:26) [14]

Stakan ©   (04.07.05 11:58) [12]
То есть только твои личные неприязни, сущность оказывается не при чем.


 
Stakan ©   (2005-07-04 12:44) [15]

Anatoly Podgoretsky ©   (04.07.05 12:26) [14]
Как мне кажется все на этом форуме высказывают лишь собственное мнение, на абсолютную истину никто не претендует. Что касается данного случая, то аргументы в поддержку моего мнения очевидны - неуникальность данных в подчинённой таблице, что противоречит теории РСУБД.


 
Хьут   (2005-07-04 12:49) [16]

Удалено модератором


 
Xmen   (2005-07-04 12:49) [17]

2Ярослав   (04.07.05 12:08) [13]
У меня вобшета 3 таблицы, я проста не упоменул 3ю иза того что он таже похож на 2го
CREATE TABLE DATA2 (
   DATA2_ID  INTEGER,
   ZNACH1    INTEGER,
   ZNACH2    VARCHAR(10)
);

ALTER TABLE DATA2 ADD CONSTRAINT FK_DATA2 FOREIGN KEY (DATA2_ID) REFERENCES MAIN (ID) ON DELETE CASCADE ON UPDATE CASCADE;

2Anatoly Podgoretsky ©
Я вам в суботу отправил через маил письмо с кодом. Но не получил ответа. Если можно ответти пожалуста.


 
Anatoly Podgoretsky ©   (2005-07-04 13:12) [18]

Xmen   (04.07.05 12:49) [17]
Поддержка по электронной почте не обеспечивается и не акредитированя почта не принимается, а ответы я даю только в конференциях, при наличии желания.


 
Anatoly Podgoretsky ©   (2005-07-04 13:15) [19]

Stakan ©   (04.07.05 12:44) [15]
Ты не высказывал мнения, а только религиозное убеждение - догмат веры.

Насчет уникальности - это где же ты видел не уникальные первичные ключи? Что за база такая странная?

Данная настройка позволяет сохранить ссылочную целостность в случае изменения поля связи и это ее назначение, такая возможность есть во всех серверах и требуется стандартов.


 
Ярослав   (2005-07-04 13:19) [20]

>> Xmen   (04.07.05 12:49) [17]
Ну вот ты и проверь в каком обработчике добавления новой записи, кокой из таблиц ты ID главной присваеваешь а то если при вставке в DATA2 ты делаешь qrData1["Data1_id"]:=qrMain["id"]; т.е. также как и при вставке в DATA1 то это мало чем поможет
Так же  qrData1 вовсе не означает что ты вставляешь в DATA1
проверь SQL  qrData1 и наверное qrData2 если он у тебя есть


 
Stakan ©   (2005-07-04 13:32) [21]

Anatoly Podgoretsky ©   (04.07.05 13:15) [19]

> Ты не высказывал мнения, а только религиозное
> убеждение - догмат веры

При чём здесь религия, я как раз высказал мнение.

> Насчет уникальности - это где же ты видел не
> уникальные первичные ключи? Что за база такая странная?

Я как раз и сказал см. [6], что в таблице DATA1 отсутствует первичный ключ, что может привести к неуникальности значений в этой таблице.

> Данная настройка позволяет сохранить ссылочную
> целостность в случае изменения поля связи и это ее
> назначение, такая возможность есть во всех серверах и
> требуется стандартов.

Согласен, но я считаю что поле ID таблицы MAIN изменять не стоит, так как это первичный ключ.


 
Anatoly Podgoretsky ©   (2005-07-04 13:54) [22]

Первичный ключ это ключ однозначно идентифицирующий запись в таблице и никаких обязательств в теории баз данных по его неизменности нет, более того настаивать на этом граничит немного с некомпетентностью. Стоит менять или нет определяется только задачей.


 
Stakan ©   (2005-07-04 13:59) [23]

Anatoly Podgoretsky ©   (04.07.05 13:54) [22]
Согласен с Вами, могу лишь заметить, что я ни на чём не настаивал, а лишь высказывал своё скромное мнение о том, что следует избегать по возможности изменения первичного ключа.


 
Anatoly Podgoretsky ©   (2005-07-04 14:00) [24]

Stakan ©   (04.07.05 13:59) [23]
Гм, а мне показалось, что было безаппеляционное утверждение, я рад что не так.


 
Xmen   (2005-07-04 14:34) [25]

ID поле таблицы MAIN первычный ключ, и он создаётся генератором, тоесть автоинкременант.
А разве нужно установит в других таблицах первычный ключ, и это как повляеет на событя. Я пробовал ставить первычные ключа к другим таблицам, но в моём случае нечего не изменил. Я обчно работаю с базами и создаю их в проге ИБЭкспрес, ключи тоже внем создавал, по моему внем недолжен быт ошибка.

2Ярослав   (04.07.05 13:19) [20]
Обесни еще попроше, если вопросы есть на уточнения то задавай.


 
Ярослав   (2005-07-05 06:27) [26]

>> Xmen   (04.07.05 14:34) [25]

Чем гадать кинь мне весь проект на мыло


 
Anatoly Podgoretsky ©   (2005-07-05 08:56) [27]

Ярослав   (05.07.05 06:27) [26]
Добрый Санта Клаус


 
Ярослав   (2005-07-05 09:13) [28]

>> Anatoly Podgoretsky ©   (05.07.05 08:56) [27]
Я то? А как же, надо же людям помогать иногда, просто мне так легче чем допытываться из человека что там у него не так


 
Anatoly Podgoretsky ©   (2005-07-05 09:21) [29]

Ярослав   (05.07.05 09:13) [28]
Ты это называешь помощью :-)


 
Ярослав   (2005-07-05 09:32) [30]

>> Anatoly Podgoretsky ©   (05.07.05 09:21) [29]
Я конечно понимаю что гораздо лучше когда человек сам добиваеться цели, но все же иногда можно и так


 
DSKalugin ©   (2005-07-05 17:33) [31]

Я ему уже выслал исправленный и работающий исходник.
Сильно не судите, человек только начинает вникать в суть, надо помочь с азами



Страницы: 1 вся ветка

Текущий архив: 2005.08.14;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.046 c
14-1121068350
msguns
2005-07-11 11:52
2005.08.14
Руслана в Запорожье


1-1122460180
Dust
2005-07-27 14:29
2005.08.14
вызвать raise Exception


1-1122412114
Riant
2005-07-27 01:08
2005.08.14
Ширина символа


3-1120674484
Unavaible
2005-07-06 22:28
2005.08.14
Unavaible database


11-1104932501
Jon
2005-01-05 16:41
2005.08.14
MMTimer and Focus