Вниз
Скачать: CL | DM;

Как связать две таблицы?   Найти похожие ветки 

← →
V l a d i m i r   (2004-05-08 15:52) [0]

У меня две таблицы: главная Dep и подчиненная ProfitStatment. Необходимо, чтобы при выделении определенной записи таблицы Dep отображались все записи таблицы ProfitStatment, соответствующие выделенной. А при удалении из главной таблицы определенной записи удалялись бы все данные из подчиненной таблицы, связанные с удаляемой записью. Подскажите, пожалуйста, как это можно сделать?


← →
Vlad ©   (2004-05-08 16:05) [1]


> V l a d i m i r   (08.05.04 15:52)  

см. справку, master/detail relationships


← →
V l a d i m i r   (2004-05-08 16:17) [2]

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

Как это исправить?


← →
Vlad ©   (2004-05-08 16:22) [3]


> V l a d i m i r   (08.05.04 16:17) [2]


> Как это исправить?

А это не ошибка. Мастер-детайл отношения нужны лишь для  отображения нескольких связанных таблиц. Удалять нужно самому.


← →
Vlad ©   (2004-05-08 16:46) [4]

Один из вариантов, на событие AfterDelete мастер-датасета повесить код удаления из детайл-датасета.


← →
V l a d i m i r   (2004-05-08 17:11) [5]

То есть в событии AfterDelete головной таблицы удаляю все записи из подчиненной: while Table2.RecCount<>0 Table2.delete?


← →
mike-d ©   (2004-05-09 19:30) [6]

> Vlad ©   (08.05.04 16:46) [4]
Лучше на BeforeDetete ...
> V l a d i m i r   (08.05.04 17:11) [5]
Table2.First;
while not Table2.Eof do Table2.Delete;


← →
Anatoly Podgoretsky ©   (2004-05-09 19:46) [7]

V l a d i m i r   (08.05.04 16:17) [2]
Лучше удалять в BeforeDelete меньше проблем будет.
А вот в AfterDelete тяжеловато будет сделать  while Table2 головной то записи уже не будет.


← →
varfix   (2004-05-10 20:14) [8]

В  BeforeDelete работает так.

with Table2 do begin
       DisableControls;
       FindKey([Table2.Fields[0].AsString]);
               while (Table2.Fields[0].AsString = Table1.Fields[0].AsString) and
               (not Eof) do
                   begin
                   if MessageDlg("Вы точно хотите удалить все записи+"?", mtInformation, mbOkCancel, 0) <> mrOk then
                   Abort
                   else
                   Delete;
                   end;
       EnableControls;
       end;



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.039 c
1-1084902374
adndryyy
2004-05-18 21:46
2004.05.30
можно *.dcu отредактировать?


1-1084968983
Jprs154
2004-05-19 16:16
2004.05.30
Выдиралка данных из HTML странички


6-1081410897
Aleksandr
2004-04-08 11:54
2004.05.30
Кто решал проблему разницы во времени между двумя компьютерами?


3-1084353383
Санёк
2004-05-12 13:16
2004.05.30
Как сделать чтобы LookupComboBox просто подставлял значения


7-1082450954
MeF88
2004-04-20 12:49
2004.05.30
О размерах памяти консольных приложений




   Наверх