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は、使用している参照がFreenilでないかどうかを確認するための追加のチェックを行い、一部のアクセス違反を防ぎます。

于 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

マスターテーブルActiveの妥当性をに設定するだけfalseです。

次に、やりたいことを実行して、に戻しtrueます。

于 2013-10-25T22:00:26.767 に答える