Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
ВнизКак связать две таблицы? Найти похожие ветки
← →
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 вся ветка
Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c