Помощь в написании студенческих работ
Антистрессовый сервис

Работа с полями — TField

РефератПомощь в написанииУзнать стоимостьмоей работы

Определить во время работы приложения, используются для НД все поля по умолчанию или только их часть, определенная с помощью редактора полей, можно при помощи свойства НД DefaultFields. Значение True указывает, что используются поля по умолчанию; False — что используются поля, определенные с помощью редактора полей. Для создания вычисляемого поля используют редактор полей Delphi. Для этого… Читать ещё >

Работа с полями — TField (реферат, курсовая, диплом, контрольная)

Применение TField.

Компонент TField позволяет обращаться к полям таблиц БД.

Каждый НД — TTable или TQuery — состоит из записей, а те, в свою очередь, состоят из полей. Таким образом, в составе записи имеется минимум одно поле.

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

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

для компонента TTable — будет разрешен доступ ко всем полям, определенным в данный момент в таблице БД, связанной с компонентом TTable;

для компонента TQuery — будет разрешен доступ ко всем полям, указанных в списке возвращаемых полей в операторе SELECT.

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

function FieldByName (const FieldName: String): TField;

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

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

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

Если хотя бы для одного поля НД создан с помощью редактора полей компонент TField первый принцип задания состава полей отвергается. В НД будут считаться определенными только те поля, для которых созданы компоненты TField, а иные поля — отвергаться как несуществующие. При обращении к таким полям из НД будет возвращаться ошибка.

Определить во время работы приложения, используются для НД все поля по умолчанию или только их часть, определенная с помощью редактора полей, можно при помощи свойства НД DefaultFields. Значение True указывает, что используются поля по умолчанию; False — что используются поля, определенные с помощью редактора полей.

Если нужно иметь доступ к полю, но не показывать его значений в визуальных компонентах, то можно установить свойство Visible данного поля в значение False.

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

Выбрать необходимый НД (TQuery или TTable), который, как правило, находится в модуле данных;

Дважды щелкнуть по пиктограмме НД, для открытия окна редактора полей;

Нажать правую кнопку мышки и во всплывающем меню выбрать «Add Fields»;

В появившемся списке всех полей НД, выбрать необходимые и нажать кнопку «ОК». Для каждого выбранного поля будет создан компонент, наследуемый от TField, как свойство класса модуля данных;

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

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

Компоненты.

Описание.

TField.

TBLOBField.

Большой двоичный объект.

TGraphicField.

Графическое поле (работает с содержимым BLOB — поля как с графическим изображением).

TMemoField.

Мемо — поле (интерпретирует BLOB — поле как большой текст).

TBooleanField.

Логическое поле.

TBinaryField.

Нетипизированное двоичное поле.

TBytesField.

Поле для хранения байтовых значений фиксированной длины.

TVarBytesField.

Поле для хранения байтовых значений переменной длины.

TDateTimeField.

Поле для хранения даты и времени.

TDateField.

Поле для хранения только даты.

TTimeField.

Поле для хранения только времени.

TNumericField.

Числовые значения.

TBCDField.

BCD — значения.

TFloatField.

Значения с плавающей точкой.

TCurrencyField.

В том числе в денежном формате.

TIntegerField.

Целочисленные значения.

TAutoIncField.

Автоинкрементное поле.

TSmallIntField.

Короткие целые.

TWordField.

Беззнаковое длинное целое.

TStringField.

Поле для хранения строковых значений.

Иерархия компонентов полей.

Особенности каждого компонента будут рассматриваться ниже. Здесь рассмотрим общие для все классов свойства, методы и события.

Следует различать обращение к полю и обращение к его значению.

К полю можно обратиться, указав его несколькими способами:

Если поле было создано с помощью редактора полей, к полю можно обратиться с помощью его имени, заданное в свойстве Name.

Используя метод FieldByName НД — function FieldByName (const FieldName: string): TField;

Используя свойство Fields [Index] НД, где Index задает порядковый номер поля НД, начиная с нуля.

Используя свойство НД FieldValues [const FieldName: string]. Это свойство позволяет обратиться к полю через его имя, например: tbClients. FieldValues ['Name']: ='ТОО IT Development';

Наиболее предпочтительным способом обращения к полю является использование метода FieldByName.

Обращение к значениям полей. Свойства Value и AsXXX.

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

Свойство Value возвращает значения следующих типов:

property Value: Variant; //—-любой тип.

property Value: string; //—-TStringField, TBLOBField.

property Value: LongInt; //—-TSmallInt, TWordField.

property Value: Double; //—-TBCDField, TCurrencyField, TFloatField.

property Value: Boolean; //—-TBooleanField.

property Value: TdateTime; //—-TDateTime, TDate, TTime.

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

var nCost: Double;

nCost:=tbTraffic.FieldByName ('Duration').Value/60*.

tbDirections.FieldByName ('Price').Value;

Свойства вида AsXXX служат для обращения к значениям полей и явного приведения их типов. Существуют следующие свойства:

property AsBoolean: Boolean;

property AsCurrency: Currency;

property AsDateTime: TDateTime;

property AsFloat: Double;

property AsInteger: Integer;

property AsString: string;

property AsVariant: Variant;

Каждое из этих свойств приводит значение поля к соответствующему типу данных. Например, если необходимо вывести в метку lbPrice (компонент TLabel) значение цены за минуту некоторого направления, то можно это сделать так:

lbPrice.Caption:=tbDirections.FieldByName ('Price').AsString;

Для того, чтобы проводить такие преобразования, необходима совместимость типов полей. В таблице на рис. 3.6.2 показана совместимость значений полей разных типов. Обозначения в таблице:

= - типы равнозначны;

+ - преобразование возможно;

+RI — преобразование возможно, округление до ближайшего целого;

? — преобразование происходит, если возможно (часто зависит от значения свойства DisplayFormat);

X — преобразование не разрешено;

memo — имеет значение memo — поля.

Тип поля.

AsString.

AsInteger.

AsFloat.

AsDateTime.

AsBoolean.

TStringField.

=.

TIntegerField.

=.

X.

X.

TSmallIntField.

=.

X.

X.

TWordField.

=.

X.

X.

TFloatField.

+RI.

=.

X.

X.

TCurrencyField.

+RI.

=.

X.

X.

TDateTimeField.

X.

+1.

=.

X.

TDateField.

X.

+1.

=.

X.

TTimeField.

X.

+2.

=.

X.

TBooleanField.

+3.

X.

X.

X.

=.

Таблица совместимости значений полей разных типов.

  • 1 — преобразование даты к числу дней с 01.01.0001
  • 2 — преобразование времени делением на 24 часа
  • 3 — в строку «True» или «False»

Рассмотрим свойства AsBoolean более подробно:

property AsBoolean: Boolean; - числовые значения приводятся к типу Boolean, если содержат 0 (False) или 1 (True). Символьные значения — если содержат в качестве первого символа «Y», «y», «T», «t», «Yes», «True» преобразуются в True и в False во всех остальных случаях.

Свойство DisplayFormat.

Свойство property DisplayFormat: string; применяется для форматирования полей классов TDateTimeField, TIntegerField и т. д.

приведена таблица спецификаторов форматов.

Спецификатор

Действие.

Число. В позициях нулевых незначащих разрядов будет отображаться ноль.

#.

Число. В позициях нулевых незначащих разрядов ничего не отображается.

.

Десятичная точка. Разделяет целую и дробную часть числа.

.

Разделитель тысяч. Каждая группа чисел из 3 разрядов в целой части, начиная с младших разрядов, отделяются друг от друга запятой.

E+.

Научный формат действительных чисел.

«xx» или `xx'.

Символы внутри кавычек или апострофах не форматируются и выводятся как есть.

Таблица спецификаторов форматов.

Пример. Если мы присвоим свойству DisplayFormat поля tbDirectionsPrice значение `######0.00″ тенге"', то для цены 123.5 тенге значение поля будет сформатировано в строку — «123.50».

В процессе работы приложения вы можете динамически изменять формат отображения любого доступного поля НД. Для этого вы просто присваиваете соответствующее значение свойству DisplayFormat.

Свойство IsNull.

Свойство property IsNull: Boolean; позволяет во время выполнения приложения проверить поле на содержание в нем пустого значения (null). Если это свойство возвращает True, то поле ничего не содержит.

Вычисляемые поля Допустим, перед нами встала задача при отображении таблицы БД Traffic динамически вычислять длительность разговоров в минутах, т. е. в компоненте gdTraffic у нас должно появиться поле с заголовком «Дл-ть в мин.». Для решения таких задач, связанных с динамическим вычислением дополнительных столбцов, применяются вычисляемые поля.

Для создания вычисляемого поля используют редактор полей Delphi. Для этого в редакторе полей создается новое поле с помощью выбора пункта всплывающего меню «New Field». Затем в появившемся окне диалога указывается имя поля, его тип и размер для строкового типа. Также данное поле должно быть отмечено как Calculated.

После создания вычисляемого поля необходимо для компонента НД, которому принадлежит это поле реализовать обработчик события OnCalcFields. Это событие возникает каждый раз, когда указатель записи перемещается по записям НД. Кроме того, если свойство НД AutoCalcFields установлено в True, событие OnCalcFields возникает также и при модификации значений невычисляемых полей.

В нашем случае код обработчика события OnCalFields будет выглядеть следующим образом:

procedure TdmMain. tbTrafficCalcFields (DataSet: TDataSet);

begin.

tbTrafficMinutes.Value:=DataSet.FieldByName ('Duration').AsInteger/60;

end;

Lookup — поля Допустим, перед нами, как разработчиками приложения по учету трафика переговоров, встала задача при отображении трафика динамически вычислять стоимость разговора, а также кроме отображения кода направления звонка отображать наименование направления.

Для вычисления значений мы научились применять вычисляемые поля. Но в нашем случае есть проблема, связанная с тем, что цена разговора находится в другой таблице БД — Directions. Следовательно, для вычисления стоимости разговоров нам каким-то образом необходимо иметь в компоненте tbTraffic поле с ценой направления, связанного с одноименным поле в таблице Directions.

Кроме того, для отображения наименования направления необходимо решит ту же задачу.

Для решения проблемы такого вида в Delphi используют, так называемые, lookup — поля. Данный вид полей применяется для таблиц БД, связанных отношениями «один ко многим» или «один к одному».

Для нашего случая создадим сначала lookup — поле с помощью редактора полей для вычисления стоимости. В диалоговом окне создания нового поля введем имя поля — Price, тип — Float. Отмечаем данное поле как Lookup. В списке «DataSet» мы выбираем компонент tbDirections. В списке «Key Fields» мы должны указать поле или набор полей связи таблицы Traffic с таблицей БД Directions. В списке «Lookup Keys» мы выбираем поля таблицы Directions, составляющие первичный ключ. И, наконец, в списке «Result Field» мы указываем поле таблицы Directions, которое должно присутствовать в tbDirections — поле Price.

Теперь мы может создать вычисляемое поле Cost, в обработчике события OnCalcFields НД tbTraffic для которого делать перемножение полей Minutes и Price.

Подобные действия по созданию lookup — поля проводим для отображения наименования направления.

Лабораторная работа Для своих приложений используйте создание вычисляемых и lookup — полей.

Показать весь текст
Заполнить форму текущей работой