使用Delphi 10.2.3,我以Firedac TFDMemTable
组件的形式删除了该组件,我使用Field Editor定义了5个字段,其中一个字段是Lookup Field(FieldKind = fkLookup
)。 / p>
我创建了一个代码来扫描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
不同?
(即,内存表中的字段多于其定义中的字段)
我在上面的代码中做错什么了吗?什么?
谢谢!