Как получить информацию о полях в таблице
Получение списка полей в таблице во время выполнения может быть столь же просто, как вызов метода GetFieldNames из TTable, TQuery или TStoredProcGetFieldNames возвращает список полей, которые включают структуру набора данных в форме списка TStrings, который может быть вставлен в такие визуальные компоненты, как TListBox через его свойство Items.
ListBox1.Clear; Table1.GetFieldNames(ListBox1.Items);
Конечно, список TStrings, возвращенный методом GetFieldNames не должен использоваться с визуальным компонентом. Это может также служить как массив имен полей, полностью сохраненных в памяти, который может использоваться как список или массив.
Но также можно отыскать намного больше информации относительно полей в таблице, чем только имена. Другие описательные признаки включают типы полей и размеры. Поиск этих значений вовлекает больше, чем просто GetFieldNames. В основном, этот процесс включает цикл через свойство FieldDefs компонента TTable, TQuery или TStoredProc.
Свойство FieldDefs по существу массив записей, одна запись для каждого поля в структуре. Каждая запись поля содержит информацию относительно поля, включая его название, тип и размер. Это относительно прямой процесс, чтобы пройти цикл через этот массив описаний полей.
Есть много причин, почему программа должна делать запрос структуры таблицы, используемой в приложении. Одна причина - подготовка к созданию компонентов TField во время выполнения, которые представляют поля в таблице. Информация, подбираемая из структуры таблицы формирует основание из компонентов TField, которые будут созданы.
Пример ниже демонстрирует, как пройти через все поля, доступные в TTable или TQuery. Пример извлекает информацию относительно доступных полей и отображает информацию в TListBox, но та же самая методика может использоваться, чтобы получить информацию, необходимую для динамического формирования потомков TField.
Пример использует TTable, как набор данных, но и TQuery также может использоваться, так как оба компонента имеют одинаковое свойство FieldDefs.
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;
Комментарии