3

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

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

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

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

4

3 回答 3

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 会进行额外检查以查看您所引用的引用是否Free不为零,以防止某些访问冲突。

于 2011-05-22T14:29:26.827 回答
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;
于 2011-05-22T14:36:41.660 回答
0

只需将Master表的属性设置Activefalse.

然后做你想做的事情并将其设置回true.

于 2013-10-25T22:00:26.767 回答