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 つのフィールドを占めています。これは正しいことです。
質問は次のとおりです。
設計時に定義されたルックアップ フィールドは で考慮され
FieldDefsますか?
(考慮されていない場合、なぜですか?)memSource.FieldDefs.Countが と異なるのはなぜmemSource.Fields.Countですか? (つまり、memtable には定義よりも多くのフィールドがあります)
上記のコードで何か間違っていますか? 何 ?
前もって感謝します !!