Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 7.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

1.3. Доступ к полям

Каждое поле набора данных представляет собой отдельный столбец, для работы с которым в Delphi служат объект Field типа TFieid и объекты производных от него типов, например, TIntegerField, TFloatField или TStringField. Для доступа к этим объектам и, соответственно, к полям записей набор данных имеет спе­циальные методы и свойства, доступные при выполнении приложения.

Свойство FieldCount типа Integer указывает количество полей набора данных. Это свойство доступно только для чтения. Количество полей набора данных может отличаться от физического числа полей таблицы БД, поскольку в набор данных не обязательно включаются все поля таблицы. Состав полей формирует­ся при разработке приложения с помощью Редактора полей набора данных и Редактора столбцов сетки DBGrid. Кроме того, возможно динамическое измене­ние состава полей во время выполнения приложения. Для компонента Query состав полей набора данных зависит также от SQL-запроса.

Значение свойства Fields [Index: Integer] типа TField представляет собой по­ле (столбец) набора данных. К отдельному полю можно обратиться, указав его номер Index в массиве Fields; номера полей находятся в пределах от нуля до FieldCount-l. Номер объекта поля в массиве полей определяет свойство index типа integer. В отличие от Редакторов полей и столбцов, применяемых на этапе разработки приложения, свойство Index можно использовать для определения и изменения порядка полей набора данных во время выполнения приложения.

В качестве примера рассмотрим чтение полей текущей записи:

procedure TForml.ButtonlClick(Sender: TObject);

Var n: integer;

begin

for n:=0 to Tablel.FieldCount-1 do

ListBoxl. Items .Add (Tablel. Fields [n].AsString) ;

end;

Здесь содержимое каждого поля текущей записи интерпретируется как строко­вое значение и добавляется к списку ListBox1.

Номер поля в наборе данных не является заранее фиксированным и известным числом и зависит от порядка полей в таблице БД, от текущего состава полей набора данных, а также от значений свойств некоторых визуальных компонен­тов, связанных с этим набором, например, сетки DBGrid. Так, при изменении порядка расположения столбцов в компоненте DBGrid соответственно изменяет­ся порядок следования полей набора данных. В связи с этим обращение к како­му-либо полю по его номеру в массиве полей может вызвать обращение совсем к другому полю. Поэтому для доступа к полям чаще используются методы FindField и FieldByName.

Функция FindField (const FieldName: String) : TField возвращает для набора данных поле, имя которого указывает параметр FieldName. В отличие от номера в массиве полей, имя поля более статично и изменяется реже. Кроме того, имя поля несет большую смысловую нагрузку, чем номер. Если заданное парамет­ром FieldName поле не найдено, то метод FindField возвращает значение Nil. На практике чаще используется метод FieldByName, который отличается от метода FindField тем, что если заданное поле не найдено, то генерируется исключи­тельная ситуация.

Замечание

Имя поля, определяемое параметром FieldName, является именем физическо­го поля таблицы БД, заданным при создании таблицы, а не именем (свойством Name) объекта Field, которое создано для этого поля.

Для набора данных Query имя FieldName физического поля можно переопреде­лить в тексте SQL-запроса.

Свойство Fields и методы FindField и FieidByName наиболее часто используют- ся для доступа к значению поля текущей записи совместно с такими свойствами объекта Field, как AsString, AsInteger, AsFloat или AsBoolean, Которые позво- ляют обращаться к значению поля как к строковому, целочисленному, вещест- венному или логическому значению, соответственно. !

Так,в коде