Форум: "Базы";
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];
ВнизКак организовать связь главный-детальный в таблицах InterBase ? Найти похожие ветки
← →
rex (2002-04-10 08:18) [0]Уважаемые мастера ! Я создал базу данных состоящую из двух таблиц между которыми должна быть связь "главный-детальный". Для организации подобной связи я использовал следующий код. который записан по событию AfterScroll:
DataM.IBDataSet2.Close;
DataM.IBDataSet2.SelectSQL.Text:="select * from mytable2 where id="+""""+IntToStr(DataM.IBDataSet1id.Value)+"""";
DataM.IBDataSet2.Open;
Однако, если с базой работать по сетке программа начинает тормозить. По полю id создан индекс, что немного убыстрило работу, но не так как хотелось бы. Проблема ещё в том, что у второй таблицы также должна быть своя дочерняя таблица. Подскажите, как лучше связать таблицы ?
← →
Джафар (2002-04-10 08:33) [1]Насколько я знаю такую связь можно заложить ещё при
создании таблиц в IB . Как это сделать описано в книгах
Архангельского . Я наизусть не помню , но если хотите могу
посмотреть .
← →
rex (2002-04-10 08:54) [2]Было бы замечательно.
← →
Johnmen (2002-04-10 08:58) [3]Если на уровне приложения с использованием IBX, то
свойство Datasource детального НД = мастерному НД.
На уровне БД - Primary key, Foreign key...
← →
rex (2002-04-10 09:54) [4]2Johnmen
Я указал в свойстве IBDataSet2.DataSource=DataSource1, но так и не понял, что это даёт, поскольку никаких изменений не произошло.
А primary и foreign key необходимы для ссылочной целостности, а я сейчас хочу, чтобы при перемещении по главной таблице автоматически появлялись соответствующие записи из дочерней. Или я что-то путаю :)
← →
Alexandr (2002-04-10 10:00) [5]нужно для дочерней таблицы запрос подкорректировать
← →
Anatoly Podgoretsky (2002-04-10 10:02) [6]В BDE я бы написал так:
DataM.Query.SQL.Text:="select * from mytable2 where id=:ID";
Может и здесь так надо, только убери из обработчика
← →
Johnmen (2002-04-10 10:04) [7]Поясняю :
1. IBDataSet2.DataSource=DataSource1
2. DataSource1.DataSet=IBDataSet1
3. В SelectSQL для IBDataSet2 должно быть ...WHERE id2=:id1 ...
где id1 - ссылочное поле из IBDataSet1, id2 - ключевое в IBDataSet2
← →
Johnmen (2002-04-10 10:05) [8]Поясняю :
1. IBDataSet2.DataSource=DataSource1
2. DataSource1.DataSet=IBDataSet1
3. В SelectSQL для IBDataSet2 должно быть ...WHERE id2=:id1 ...
где id1 - ключевое поле из IBDataSet1, id2 - ссылочное в IBDataSet2
← →
Sergey13 (2002-04-10 10:07) [9]Попробуй в запросе использовать параметры вместо прямого формирования текста запроса. А велика ли вторая таблица?
← →
Johnmen (2002-04-10 10:10) [10]...и, как заметил Anatoly Podgoretsky ©, обработчик убрать...
← →
rex (2002-04-10 12:39) [11]Заработало !!!
Кстати говоря вторая таблица не очень большая - около 29000 записей, но отсутствие опыта является самым большим тормозом :). Всем большое спасибо, особенно Johnmen.
← →
Edas (2002-04-10 14:55) [12]A kak sdelat" chtoby takaja sviazka zarabotala s IBQueryMaster ir IBQueryDetail?
Spasibo.
← →
Johnmen (2002-04-10 15:21) [13]>Edas (10.04.02 14:55)
IBQueryDetail.Filtered=True и в обработчике OnFilterRecord :
Accept:=IBQueryDetail["id2"]=IBQueryMaster["id1"]
← →
Леха (2002-04-10 15:43) [14]По моему, надо все осуществить на уровне базы данных, созданием первичных и вторичных ключей. Посмотри help по SQL командам для Interbase.
ALTER TABLE table <operation> [, <operation> …];
| ADD <tconstraint>
<col_constraint> = [CONSTRAINT constraint]
{ UNIQUE
| PRIMARY KEY
| REFERENCES other_table [(other_col [, other_col …])]
[ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
[ON UPDATE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
| CHECK (<search_condition>)}
← →
Леха (2002-04-10 15:44) [15]По моему, надо все осуществить на уровне базы данных, созданием первичных и вторичных ключей. Посмотри help по SQL командам для Interbase.
ALTER TABLE table <operation> [, <operation> …];
| ADD <tconstraint>
<col_constraint> = [CONSTRAINT constraint]
{ UNIQUE
| PRIMARY KEY
| REFERENCES other_table [(other_col [, other_col …])]
[ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
[ON UPDATE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
| CHECK (<search_condition>)}
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c