使用 Delphi 10.2.3,我在表单中放入了一个 FiredacTFDMemTable
组件,我使用字段编辑器定义了 5 个字段,其中一个字段是 Lookup Field ( FieldKind = fkLookup
)。
我创建了一个代码来扫描MemSource
MemTable 的所有字段,以将这些字段添加到MemDestination
Memtable 中。
我在扫描时遇到了问题,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;
我意识到memSource.FieldDefs.Count
只有 4 个字段,它错过了第 5 个查找类型。
但是memSource.Fields.Count
占 5 个字段,这是正确的。
问题是:
是否考虑了在设计时定义的查找字段
FieldDefs
?
(如果不考虑,那为什么?)为什么
memSource.FieldDefs.Count
不同于memSource.Fields.Count
? (即我在 memtable 中的字段比其定义中的字段多)
我在上面的代码中做错了吗?什么 ?
提前致谢 !!