Сторнирование соединения Master-Detail в Delphi
У меня есть 2 таблицы, которые связаны с помощью подключения master-detail. Мне нужно, чтобы соединение было отменено при создании Form2 - поэтому основная таблица становится таблицей подробностей, а таблица подробностей становится главной таблицей.
Я попытался сделать это, и программа компилируется, но не работает так, как я хочу (предыдущее соединение разрывается, но не переворачивается, поэтому программа вроде работает так, что таблицы вообще не связаны):
Form1.ADOTableDetail.MasterSource.Destroy;
Form1.ADOTableMaster.MasterSource := Form1.DataSourceDetail;
Form1.ADOTableMaster.MasterFields := 'the_field_that_connects_them';
Есть идеи, как мне этого добиться?
3 ответа
Не разрушайте MasterSource!
Для того чтобы разорвать отношения сделай
Form1.ADOTableDetail.MasterSource:= nil;
Form1.ADOTableDetail.MasterFields:= '';
чем использовать это, чтобы перенаправить MasterDetail
Form1.ADOTableMaster.MasterSource := Form1.DataSourceDetail;
Form1.ADOTableMaster.MasterFields := 'the_field_that_connects_them';
Также никогда не звоните .Destroy
напрямую, используйте .Free
вместо.
Бесплатно делает дополнительную проверку, чтобы увидеть, если ссылка вы Free
ing не ноль, предотвращая некоторые нарушения прав доступа.
procedure TForm1.ExchangeMasterDetail;
begin
ADOTableDetail.Close;
ADOTableMaster.Close;
ADOTableMaster.MasterFields := ADOTableDetail.IndexFieldNames;
ADOTableMaster.IndexFieldNames := ADOTableDetail.MasterFields;
ADOTableDetail.IndexFieldNames := '';
ADOTableDetail.MasterFields := '';
ADOTableDetail.MasterSource := nil;
ADOTableMaster.MasterSource := DataSourceDetail;
ADOTableDetail.Open;
ADOTableMaster.Open;
end;
Просто установите мастер- стол Active
уместность false
,
Затем делай то, что хочешь, и возвращай true
,