Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 3.rtf
Скачиваний:
12
Добавлен:
15.06.2014
Размер:
12.74 Mб
Скачать

Лабораторная работа № 3

Тема: Работа с полями

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

Под набором данных понимается группа записей из одной или нескольких таблиц БД, доступная для использования с помощью компонентов-наборов TTable.

Таким образом, в структуре таблицы имеется минимум одно поле.

Использование объектов полей.

Для удобства работы с конкретным полем можно создать объект-поле класса TField или одного из его специализированных потомков - TStringField, TIntegerField, TBlobField и т.д. Объект-поле создается на этапе конструирования программы с помощью редактора полей. Если определен объект-поле, получить доступ к полю можно по имени этого объекта. Редактор полей присваивает объектам-полям имена путем сцепления имени источника данных и имени поля. Если, допустим, вы имеете компонент Firms типа TTable (Firms:TTable), который связан с источником данных у которого есть поле City, то при определении объекта для этого поля, объекту будет присвоено имя FirmsCity и можно использовать прямое обращение к нему. Например :

FirmsCity.AsString:=’Омск’;

Если хотя бы для одного поля НД создан объект-поле, все поля НД, для которых такие объекты не определены, становятся недоступными. К «несуществующим» полям обратиться из данного НД нельзя. Вновь вернуться к использованию всех полей НД можно только на этапе конструирования программы, удалив в редакторе полей все определенные ранее объекты или добавив с его помощью объекты для недостающих полей.

Если нужно иметь доступ к полю, но не показывать его значение в компонентах, визуализирующих данные (например, в компоненте TDBGrid), свойство Visible этого объекта-поля следует поместить значение False.

Для вызова редактора полей нужно дважды щелкнуть по компоненту типа TTable или щелкнуть по нему правой кнопкой мыши и выбрать в локальном меню Fields Editor. Предварительно НД должен быть связан с нужной ТБД: в TTable должны быть определены свойства DatabaseName и TableName.

Создаем объекты-поля

Для каждого поля создан свой объект

Чтобы добавить объекты-поля, щелкните по окну редактора правой кнопкой и выберите AddFields (рис. 1). В появившемся списке будут выделены поля, для которых еще не созданы объекты. Если нужно создать объекты-поля для всех полей НД, выберите Add All Fields.

Обращение к значению поля

К значению поля можно обратиться при помощи свойства Value и Asxxxx класса TField или его потомков.

В классе TField определены следующие свойства Asxxxx для приведения типов полей:

Property AsBoolean:Boolean;

Property AsInteger:Integer;

Property AsCurrency:Currency;

Property AsString:String;

Property AsDateTime:TDateTime;

Property AsVariant:Variant;

Property AsFloat:Double;

Каждое из этих свойств приводит значение поля к соответствующему типу данных, указанному в названии свойства. Например, если BooksBookId – поле TIntegerField, для приведения его к типу String нужно воспользоваться свойством AsString:

Edit1.Text:= BooksBookId.AsString

Следует знать, что преобразование не всех типов возможно.

Если для НД не создан ни один объект-поле, получить доступ к значению поля этого НД можно с помощью его метода FieldByName:

Function FieldByName (const FieldName:string):TField

или через его свойства Fields и FieldValues:

property Fields[Index]:TField

property FieldValues[‘Имя поля’]:Variant

Допустим у вас имеется Books:TTable (Books типа TTable) и в этой таблице имеется поле Year, то следующие обращения будут идентичными:

Books.FieldByName(‘Year’).AsInteger:=2000;

Books[‘Year’]:=2000;

Books.FieldValues[‘Year’]:=2000;

Books.Fields[4].AsInteger:=2000;

(предполагается, что поле ‘Year’ является 5-м по счету в НД Books).

События объекта-поля

В качестве примера возьмем проверку правильности введенного в поле значения.

Для контроля за правильностью вводимых в поле значений можно использовать события OnValidate или OnSetText объекта-поля. Оба события наступают после изменения значения поля, но до его запоминания в таблице.

В обработчике OnValidate в случае обнаружения неверного значения программа должны предотвратить его запоминание, создав исключительную ситуацию или обратившись к глобальной процедуре Abort. Например, поле Dohod_cl (доход клиента) не может быть отрицательным. Для контроля за этим можно написать такой обработчик:

procedure TMainF.Table1Dohod_clValidate(Sender: TField);

begin

if Table1Dohod_cl.Value<0 then

begin

ShowMessage(‘Доход не может быть отрицательным’);

Abort;

end;

end;

Однако следует учесть, что, отказавшись от запоминания неверного значения в таблице, программа тем не менее оставила НД в состоянии редактирования. Это означает, что пользователь не может покинуть поле до тех пор, пока не введет в него правильное значение.

В этом случае использовать событие OnSetText значительно разумнее, т.к. в нем можно просто игнорировать неверные значения и не создавать исключительную ситуацию. Дело в том, что в этом обработчике программа должна присвоить полю новое значение, и если она этого не сделает, то поле останется без изменения:

procedure TMainF.Table1Dohod_clSetText(Sender: TField; const Text: String);

begin

if StrToFloat(Text)<0 then

ShowMessage(‘Доход не может быть отрицательным’)

Else

Table1Dohod_cl.Value:=StrToFloat(Text);

end;

Соседние файлы в предмете Базы данных