Карта сайтаСсылкиКонтакты

Как получить информацию о полях в таблице

PDF Печать
Статьи

Со свойством FieldDefs для TDataSet Вы можете получить много информации о таблице во время выполнения.

Получение списка полей в таблице во время выполнения может быть столь же просто, как вызов метода 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; 

По материалам http://delphi.3000.com


 

Добавить комментарий


Защитный код
Обновить