Невизуальные компоненты 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!