Невизуальные компоненты Delphi для работы с БД.



Перечислим наиболее часто используемые невизуальные компоненты.

TDatabase – определяет общие параметры связи с БД (имеет большое значение для серверных БД; для локальных может не использоваться, поскольку параметры связи заданы в Alias BDE).

TTable – компонент для работы с набором данных (НД) в виде отдельной таблицы БД.

TQuery – компонент для работы с НД, полученным в результате выполнения SQL запроса к БД (обычно используется в приложениях серверных БД).

TStoredProc – компонент для работы с НД, полученным в результате выполнения хранимой на сервере процедуры (используется в приложениях серверных БД).

TField – компонент для работы с отдельными полями наборов данных. (Непосредственно в приложениях не используется. Используются его потомки TStringField, TIntegerField и т.д.)

TTable, TQuery, TStoredProc имеют общего предка TDataSet, определяющего основные свойства и методы работы с набором данных независимо от его происхождения. Сам TDataSet непосредственно в приложениях не используется.

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

При этом в любом варианте доступ к полю можно получить с помощью метода FieldByName. Например:

 

LicaT.FieldByName(‘Name’)

NalichieT.FieldByName(‘Kolvo’)

 

Замечание. Здесь подразумевается доступ не к значению поля, а ко всему полю как к объекту, имеющему ряд свойств и методов.

Компонентам TField по умолчанию присваиваются имена вида: имя набора данных + имя поля. Например, LicaTName, NalichieTKolvo. Поэтому следует избегать применения подобных имен в других целях.

Помимо имени, для каждого компонента TField можно задать ряд других свойств: только для чтения (ReadOnly), требование обязательного ввода значения (Required), формат отображения значения (DisplayFormat), минимальное и максимальное значения и т.д.

Компонент TField обеспечивает доступ к полю в целом, а не только к его значению. Для доступа же собственно к значению, хранящемуся в поле, используются свойство Value, а так же AsBoolean, AsCurrency, AsDateTime, AsFloat, AsInteger, AsString, AsVariant. Например:

 

var s:string;

. . .

s := LicaT.FieldByName(‘Name’).Value;

s := LicaTName.Value;

s := LicaTName.AsString;

 

Допустимо также:

 

s := LicaT[‘Name’]; что эквивалентно: s := LicaT.FieldValues[‘Name’];

 

Свойство Value предполагает неявное преобразование типа значения. Во избежание недоразумений “по умолчанию”, лучше использовать явное преобразование As***.

Lookup поля.

При визуализации дочерних таблиц часто возникает необходимость показа информации из родительских таблиц. Например, при показе таблицы наличия, необходимо показывать не условные номера предметов и лиц, а их реальные наименования.

В этих целях используются так называемые Lookup поля. Например, в таблице наличия таким полем будет поле PredmetName, содержащее реальное наименование предмета, которое извлекается из таблицы предметов по условному номеру предмета.

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

Key Fields – поля внешнего ключа, по которым ищется информация в родительском наборе данных (здесь Predmet);

Dataset – родительский набор данных (PredmetyT);

Lookup Keys – поля первичного ключа родительского набора данных, которые соответствуют полям внешнего ключа дочернего набора данных (NPredm);

Result Field – поле родительского набора данных, значение которого будет подставляться в создаваемое Lookup поле (Name).

Замечание: Lookup поля используются и для ввода значений в дочернюю таблицу путем выбора соответствующих записей из родительской таблицы.

 

Вычисляемые поля.

Иногда при визуализации информации, хранящейся в БД, возникает необходимость в показе атрибутов, которые физически отсутствуют в БД, но могут быть легко вычислены на основе представленных в БД атрибутов. Например, в таблице наличия показывается количество предметов и их цена (как Lookup поле), а также необходимо показать их общую стоимость (произведение количества на цену). Или, например, в БД о работниках предприятия хранится информация о семейном положении сотрудников в виде логического поля; необходимо визуализировать эту информацию в виде слов: женат, холост, замужем, не замужем в зависимости от пола сотрудника.

В этих целях используются вычисляемые поля. Они создаются с помощью редактора полей, так же как и Lookup поля, но тип поля указывается, как Calculated. Собственно расчет значений вычисляемых полей производится в обработчике события OnCalcFields соответствующего набора данных. Это событие наступает при любом перемещении по набору данных (в том числе и при открытии НД), кроме того, если свойство НД AutoCalcFields установлено в True, то событие наступает и при любом изменении полей НД.

Замечание 1. Событие OnCalcFields может наступать очень часто, поэтому следует минимизировать код его обработчика. Иначе перемещения по набору данных могут существенно замедлиться.

Замечание 2. В обработчике OnCalcFields значения могут присваиваться тольковычисляемым полям.


Дата добавления: 2018-05-31; просмотров: 621; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!