Delphi 10.2.3 を使用して、フィールド エディタを使用して 5 つのフィールドを定義した FiredacTFDMemTable
コンポーネントをフォームにドロップしました。これらのフィールドの 1 つはルックアップ フィールド ( FieldKind = fkLookup
) です。
MemSource
MemTable のすべてのフィールドをスキャンしてそれらのフィールドを 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 には定義よりも多くのフィールドがあります)
上記のコードで何か間違っていますか? 何 ?
前もって感謝します !!