1

使用 Delphi 10.2.3,我在表单中放入了一个 FiredacTFDMemTable组件,我使用字段编辑器定义了 5 个字段,其中一个字段是 Lookup Field ( FieldKind = fkLookup)。

我创建了一个代码来扫描MemSourceMemTable 的所有字段,以将这些字段添加到MemDestinationMemtable 中。

我在扫描时遇到了问题,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 个字段,这是正确的。

问题是:

  1. 是否考虑了在设计时定义的查找字段FieldDefs
    (如果不考虑,那为什么?)

  2. 为什么memSource.FieldDefs.Count不同于memSource.Fields.Count? (即我在 memtable 中的字段比其定义中的字段多)

我在上面的代码中做错了吗?什么 ?

提前致谢 !!

4

0 回答 0