我有两个使用主从细节连接连接的表。我需要在创建Form2时反转连接 - 因此主表成为详细信息表,详细信息表成为主表。
我尝试这样做,并且程序编译,但是没有按照我想要的方式工作(之前的连接断开,但它没有被反转,所以程序有点像桌子根本没有连接) :
Form1.ADOTableDetail.MasterSource.Destroy;
Form1.ADOTableMaster.MasterSource := Form1.DataSourceDetail;
Form1.ADOTableMaster.MasterFields := 'the_field_that_connects_them';
关于如何实现这一目标的任何想法?
答案 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
。