Используя Delphi 10.2.3, я поместил в форму компонент Firedac TFDMemTable
, в котором я использовал редактор полей для определения 5 полей, одно из этих полей - поле поиска (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, чем в его определении)
Я что-то не так делаю в приведенном выше коде?Что?
Заранее спасибо !!