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

Лекция №2

Поля

Компонент TField позволяет обращаться к полям таблиц баз данных. Каждый набор данных - неважно, ТТаЫе или TQuery - состоит из записей, а те, в свою очередь, состоят из полей. Таким образом, в составе записи имеется минимум одно поле.

В Delphi имеется возможность использовать при работе с НД или все поля, определенные в данной ТБД на текущий момент, или использовать только часть существующих полей.

Использование только части имеющихся полей дает то преимущество, что значения неиспользуемых полей не могут быть изменены ни вследствие алгоритмической ошибки, ни вследствие злонамеренного умысла, поскольку неиспользуемые поля считаются неизвестными.

Существует два способа задания состава полей для НД.

Первый состоит в том, что после создания НД не предпринимается никаких дополнительных действий по уточнению состава полей. Тогда:

  • для компонента TTable - будет разрешен доступ ко всем полям, определенным в данный момент в ТБД, связанной с компонентом ТТablе;

  • для компонента TQuery - будет разрешен доступ ко всем полям (в том числе и результатам выражений), указанным в списке возвращаемых полей в операторе SELECT.

К полю в этом случае можно обращаться с помощью метода FieldByName компонентов TTable и TQuery:

function FieldByName(const FieldName: string): TField;

или через свойство указанных компонентов Fields [Index], которое возвращает указатель на тип TField.

Определить во время выполнения приложения, используются для набора данных все поля по умолчанию или только их часть, определенная посредством редактора полей, можно при помощи свойства набора данных

rо, rt property DefaultFields: Boolean;

Аббревиатура rо (read only) означает, что свойство доступно только для чтения; rt (run time) означает, что свойство доступно только во время выполнения приложения. Полный список принятых сокращений см. в начале книги. Значение True указывает, что используются поля по умолчанию; False – что используются поля, определенные при помощи редактора полей.

Второй способ определения состава полей заключается в том, что для данного НД поля как компоненты TField добавляются в форму с помощью редактора полей Delphi. К таким полям можно обращаться через его имя, определяемое в свойстве Name компонента TField, соответствующего данному полю.

По умолчанию, при добавлении в форму компонента TField, его имя генерируется так: берется имя НД (т.е. значение свойства Name компонента TTable или TQuery, к которому принадлежит поле) и к нему добавляется имя поля, взятое из структуры ТБД (TTable) или из запроса (TQuery).

Так, поле с именем FIO, используемый в НД Students, при добавлении в форму средствами редактора полей, получит имя StudentsFIO.

Это имя будет относиться целиком к компоненту TField, а не только к значению (например, "Иванов И.И."), которое поле FIO содержит в текущей записи ТБД. Компонент TField, как будет показано ниже, обладает рядом свойств, методов и событий, обращаться к которым следует через указание имени компонента TField и имени свойства, метода или обработчика события, например:

StudentsFIO. Index := 5; // изменить порядковый номер поля StudentsFIO. Readonly := True; //запретить изменение значений поля

Таким образом, экземпляр StudentsFIO компонента TField трактуется не как конкретное значение, которое принимает поле FIO в конкретной строке ТБД, а как весь столбец набора данных, обладающий единым поведением, т.е. едиными свойствами, методами и событиями для всех записей набора данных. Значение поля для текущей записи доступно с помощью свойств Value, AsBoolean, AsString и т.д. Например:

IF StudentsFIO.AsString = 'Иванов' then ....

Таким образом, экземпляр StudentsFIO компонента TField трактуется не как конкретное значение, которое принимает поле FIO в конкретной строке ТБД, а как весь столбец набора данных, обладающий единым поведением, т.е. едиными свойствами, методами и событиями для всех записей набора данных. Значение поля для текущей записи доступно с помощью свойств Value, AsBoolean, AsString и т.д. Например:

IF StudentsFIO.AsString = 'Иванов' then ....

Свойство Fields позволяет Вам выбрать тип результата написав Fields[N].AsString. Этот и несколько связанных методов обеспечивают a простой и гибкий способ доступа к данным, связанными с конкретным полем. Вот список доступных методов который Вы можете найти в описании класса TField:

 property AsBoolean

property AsFloat

property AsInteger

property AsString

property AsDateTime

Всякий раз (когда это имеет смысл), Delphi сможет сделать преобразования. Например, Delphi может преобразовывать поле Boolean к Integer или Float, или поле Integer к String. Но не будет преобразовывать String к Integer, хотя и может преобразовывать Float к Integer. Если Вы хотите работать с полями Date или DateTime, то можете использовать AsString и AsFloat для доступа к ним.

Доступ к полям можно получить, используя свойство набора данных:

property FieldValues|const FieldName: string]: Variant;

Это свойство позволяет обращаться к полю через его имя, указываемое как содержимое параметра FieldName, например: Tablel.FieldValues['FIO'] := 'Иванов';

Свойство FieldCount возвращает число полей в текущей структуре записи. Если Вы хотите программным путем прочитать имена полей, то используйте свойство Fields для доступа к ним:

 var

S: String;

begin

S := Fields[0].FieldName;

end;

 Индекс передаваемый в Fields (начинающийся с нуля), и определяет номер поля к которому Вы получите доступ, т.е. первое поле - ноль, второе один, и так далее.

Как было объяснено выше, свойство FieldByName позволяет Вам получить доступ к содержимому определенного поля просто указав имя этого поля:

Использование редактора полей для организации компонентов tField и установки значений их свойств

Для того, чтобы определить один или несколько компонентов TField, нужно:

1. Выбрать необходимый НД (компонент TTable или TQuery);

2. Нажать правую кнопку мыши;

3. Во всплывающем меню выбрать режим Field Editor (запуская тем самым редактор полей};

4. Вновь нажать правую кнопку мыши и во всплывающем меню выбрать Add Fields',

5. В появившемся списке полей ТБД (TTable) или полей, участвующих в запросе (TQuery), выбрать необходимые. Нажать кнопку Ok. Для каждого из указанных полей будет создан компонент TField.

6. Если необходимо изменить свойства конкретного поля или написать обработчик для какого-либо события, необходимо в редакторе полей выбрать нужное поле и, используя инспектор объектов, установить значение в свойство или определить обработчик события.

Визуальные компоненты работы с данными

Визуальные компоненты для работы с данными находятся на странице DataControls Палитры компонентов. Почти все они похожи на стандартные компоненты, но основным их отличием является направленность на работу с Базами Данных. Визуальные компоненты используются для создания интерфейса приложения, а так же для навигации по набору данных, отображению и редактированию записей набора данных.

Одна часть компонентов предназначена для отображения данных текущей записи набора данных или всего набора данных, например, TDBText и TDBGrid. А другая часть компонентов предназначена для навигации по набору данных и редактированию текущей записи, например, TDBNavigator, TDBEdit, TDBMemo, TDBRadioGroup и TDBListBox.

procedure TForm1.FormCreate(Sender: TObject);

begin

...

// Задаем источник данных

DBEdit1.DataSource:=DataSource1;

// Задаем поле

DBEdit1.DataField:='Code';

...

end;

Основными свойствами визуальных компонентов являются DataSource - для указания источника данных, с которым компонент "будет работать" и свойство DataField - для указания конкретного поля, с которым компонент будет связан.

Одним из самых простых визуальных компонентов является компонент TDBText. Данный компонент предназначен только для отображения значения поля текущей записи набора данных. Этот компонент очень похож на компонент TLabel.

Компоненты TDBEdit и TDBMemo предназначены для отображения значения поля текущей записи набора данных, но с возможностью редактирования этого значения. То есть, значение поля, отображаемое в одном из этих компонентов может быть отредактировано, изменено или добавлено в набор данных, что в некотором роде очень упрощает работу. Как только компонент потеряет фокус, содержащееся в нем значение поля сразу же будет отображено в наборе данных.

Для отображения и редактирования значения логического поля служит компонент TDBCheckBox. Данный компонент похож на аналогичный компонент TCheckBox и представляет собой "флажок" с текстовым заголовком. Если в нем располагается "галочка", то компонент считается включенным, иначе выключенным. Если данный компонент связать с некоторым полем логического или строкового типа, то в зависимости от состояния компонента в поле будет занесено значение True или False. Кроме того, переключатель TDBCheckBox можно применять для отображения обычных текстовых значений. Для этого служат два свойства ValueChecked - для отображения значения во включенном состоянии, и свойство ValueUnChecked - для отображения значения в выключенном состоянии (см. Пример):

procedure TForm1.FormCreate(Sender: TObject);

begin

// Задаем источник данных

DBCheckBox1.DataSource:=DataSource1;

// Задаем поле Базы Данных

DBCheckBox1.DataField:='Log';

// Устанавливаем значение во включенном состоянии

DBCheckBox1.ValueChecked:='Да;Д';

// Устанавливаем значение в выключенном состоянии

DBCheckBox1.ValueUnchecked:='Нет;Н';

end;

Иногда требуется организовать выбор значения поля Базы Данных из фиксированного числа значений. Для этого удобно использовать компоненты TDBRadioGroup, TDBComboBox и TDBListBox.

Управлением числом и названием отдельных переключателей компонента TDBRadioGroup служит свойство Items, которое содержит названия заголовков переключателей. Для указания значений выбранных переключателей служит свойство Values. Если происходит переход к некоторой записи набора данных и значение поля, с которым связан компонент, равно значению в списке свойства Values, то соответствующий переключатель будет переведен во включенное состояние. При помощи данного компонента также можно задавать значения поля текущей записи набора данных. Но, изменение значения поля произойдет только при потере фокуса или выборе другого переключателя.

Для задания некоторого фиксированного значения также служат компоненты TDBComboBox и TDBListBox. При выборе некоторого значения одного из этих компонентов это значение сразу же будет занесено в поле Базы Данных. Но, не нужно забывать, что новое значение также будет отображено в наборе данных, только при потере фокуса.