Есть множество причин, для чего может понадобиться запрос на получение структуры используемой программой таблицы. Одна из причин - необходимость во время выполнения программы создавать TField-компоненты, работающие с полями таблицы. Полученная информация о структуре таблицы как раз и ложится в основу создания TField-компонентов.
Приведенный ниже пример демонстрирует технологию полного воспроизведения доступных полей в компоненте TTable или TQuery. Программа извлекает информацию о доступных полях и отображает ее в компоненте TListBox; эта информация необходима для динамического построения потомков TField. В данном примере источником данных служит компонент TTable, но той же цели может служить и TQuery (TTable и TQuery для доступа к полям таблицы используют одно и то же свойство Fields).
procedure TForm1.Button1Click(Sender: TObject); var
i: Integer; F: TFieldDef; D: String;begin
Table1.Active := True; ListBox1.Items.Clear;
with Table1 do begin for i := 0 to FieldDefs.Count - 1 do begin F := FieldDefs.Items[i]; case F.DataType of ftUnknown: D := 'Unknown'; ftString: D := 'String'; ftSmallint: D := 'SmallInt'; ftInteger: D := 'Integer'; ftWord: D := 'Word'; ftBoolean: D := 'Boolean'; ftFloat: D := 'Float'; ftCurrency: D := 'Currency'; ftBCD: D := 'BCD'; ftDate: D := 'Date'; ftTime: D := 'Time'; ftDateTime: D := 'DateTime'; ftBytes: D := 'Bytes'; ftVarBytes: D := ''; ftBlob: D := 'BLOB'; ftMemo: D := 'Memo'; ftGraphic: D := 'Graphic'; else D := ''; end; ListBox1.Items.Add(F.Name + ', ' + D); end; end; Table1.Active := False;end;