在Delphi中反转Master-Detail连接

时间:2011-05-22 13:42:03

标签: database delphi tadotable

我有两个使用主从细节连接连接的表。我需要在创建Form2时反转连接 - 因此主表成为详细信息表,详细信息表成为主表。

我尝试这样做,并且程序编译,但是没有按照我想要的方式工作(之前的连接断开,但它没有被反转,所以程序有点像桌子根本没有连接) :

    Form1.ADOTableDetail.MasterSource.Destroy;
    Form1.ADOTableMaster.MasterSource :=  Form1.DataSourceDetail;
    Form1.ADOTableMaster.MasterFields := 'the_field_that_connects_them';

关于如何实现这一目标的任何想法?

3 个答案:

答案 0 :(得分:6)

不要破坏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的引用是否为零,从而防止某些访问冲突。

答案 1 :(得分:3)

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;

答案 2 :(得分:0)

只需将表格Active设为false即可。

然后做你想要的东西并将其设置回true