- •1. Наборы данных
- •Var I: integer;
- •1.1. Состояния наборов данных
- •If not CheckBoxl.Checked then Abort;
- •If not CheckBoxl.Checked then begin
- •If CheckBox2.Checked then
- •If CheckBox2.Checked then begin
- •1.2. Режимы наборов данных
- •Var n: integer;
- •1.3. Доступ к полям
- •Var X: integer;
- •Var X: integer;
- •1.4. Особенности набора данных Table
- •If OpenDialogl.Execute then begin
- •Var n: integer;
- •If Editl.CanFocus then Editl.SetFocus;
- •1.5. Особенности набора данных Query
- •Interface
- •Implementation
- •2. Объекты поля
- •2.1 Редактор полей
- •2.2. Операции с полями
- •Var X: integer;
- •Var s: string;
- •X: real;
- •Var s: string;
- •X: real;
- •If not Tablel.Fields[2].IsValidChar(Editl.Text[1]) then
- •If (TablelCode.Required) and (TablelCode.IsNull)
- •3. Источник данных
- •Var n: integer;
- •1. Отображение и редактирование значения логического поля
- •2. Отображение и выбор значения поля
- •3. Отображение и выбор значения поля из списка
- •3.1. Простой и комбинированный списки
- •3.2. Списки, сформированные по значениям поля набора данных
- •4. Представление записей в табличном виде
- •4.1 Характеристики сетки
- •Var r :tRect;
- •4.2. Столбцы сетки
- •Var c, n :integer;
- •4.3. Использование модифицированной сетки
- •5. Использование навигационного интерфейса
- •6. Вывод графических изображений
- •Interface
- •Implementat ion
- •If OpenPictureDialogl.Execute then
- •If SavePictureDialogl.Execute then
- •7. Построение диаграмм
- •Var n: integer;
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, Которые позво- ляют обращаться к значению поля как к строковому, целочисленному, вещест- венному или логическому значению, соответственно. !
Так,в коде
