1

Delphi 10.2.3 を使用して、フィールド エディタを使用して 5 つのフィールドを定義した FiredacTFDMemTableコンポーネントをフォームにドロップしました。これらのフィールドの 1 つはルックアップ フィールド ( FieldKind = fkLookup) です。

MemSourceMemTable のすべてのフィールドをスキャンしてそれらのフィールドを Memtable に追加するコードを作成しましたMemDestination

MemSource.FieldDefsフィールドの総数がルックアップを考慮していないため、スキャンに問題がありました。コードを参照してください:

    procedure TFormA.BTCopyFieldsClick(Sender: TObject);
    var
       i         : integer;
    begin

      for I := 0 to MemSource.FieldDefs.Count-1 do
      begin
            if (memSource.Fields.Fields[i].FieldKind = FkData) then
                memDestination.FieldDefs.Add (
                         memSource.FieldDefs.Items[i].DisplayName,
                         memSource.FieldDefs.Items[i].DataType,
                         memSource.FieldDefs.Items[i].Size,
                         memSource.FieldDefs.Items[i].Required
                         )
           Else

                ShowMessage( GetEnumName(TypeInfo(TFieldKind),
                             Integer(memSource.FieldDefs.Items[i].Datatype)
                           );

           memDestination.CreateDataSet;
           memDestination.CopyDataSet(memSource,[coRestart, coAppend]);
      end;
   end;

4 つのフィールドしかないことに気付きましたmemSource.FieldDefs.Count。ルックアップ タイプの 5 番目のフィールドがありませんでした。

ただしmemSource.Fields.Count、5 つのフィールドを占めています。これは正しいことです。

質問は次のとおりです。

  1. 設計時に定義されたルックアップ フィールドは で考慮されFieldDefsますか?
    (考慮されていない場合、なぜですか?)

  2. memSource.FieldDefs.Countが と異なるのはなぜmemSource.Fields.Countですか? (つまり、memtable には定義よりも多くのフィールドがあります)

上記のコードで何か間違っていますか? 何 ?

前もって感謝します !!

4

0 に答える 0