3

ネストされた TClientDataSet が与えられた場合、詳細 TClientDataSet でリンク フィールド名を見つけるにはどうすればよいですか?

ある TClientDataSet から別の TClientDataSet に (レコードごとに) データをコピーしていますが、リンク フィールドを自動的に無視したいと考えています。

TClientDataSet.Data プロパティを使用してデータをコピーすることもできますが、それでもリンクとキー フィールドをクリアする必要があります。

4

1 に答える 1

0

詳細/ネストされたデータセットの「DataSetField」プロパティを確認するか、マスター データセットの「NestedDataSet」プロパティにアクセスできます。

「リンク」フィールド名を取得するサンプル コード:

function GetCDSDLinkFieldName(cds: TClientDataSet): string;
var
  i: Integer;
  cdsDetail: TClientDataSet;
begin
  Result := EmptyStr;
  cdsDetail := nil;
  if Assigned(cds.DataSetField) then
    cdsDetail := cds;
  if not Assigned(cdsDetail) and (cds.FieldCount > 0) then
  begin
    i := 0;
    while not Assigned(cdsDetail) and (i < cds.FieldCount) do
    begin
      if cds.Fields[i].DataType = ftDataSet then
        cdsDetail := TClientDataSet(TDataSetField(cds.Fields[i]).NestedDataSet);
      Inc(i);
    end;
  end;
  if Assigned(cdsDetail) then
    Result := cdsDetail.DataSetField.FieldName;
end;

呼び出し例:

procedure ...
begin
  ShowMessage(GetCDSDLinkFieldName(cdsMaster));
  ShowMessage(GetCDSDLinkFieldName(cdsDetail));
end;

PS:2年後、この回答が質問の作成者に役立つとは思いませんが、同じ主題を検索する他の人には役立つかもしれません。

于 2012-05-31T22:47:11.300 に答える