Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектирование БД в Delphi ВТиП.doc
Скачиваний:
53
Добавлен:
17.03.2016
Размер:
3.62 Mб
Скачать
    1. КомпонентtQuery

Компонент TQuery порожден от родительского класса TDBDataSet, рассмотренного в разделе 5, и наследует от него основные методы, события и свойства.

Таким образом, компонент TQuery может рассматриваться как эквивалент компонента TTable, который отличается только тем, что его состав определяется содержимым запроса и располагается в локальной таблице. Следовательно, процесс создания в модуле данных компонента TQuery и организация его связи с компонентом TDataSource остается такой же, как и у компонента TTable. Ниже показан процесс подключения компонента TQuery к проекту.

Так же как и компонент TTable компонент TQuery имеет собственные свойства, методы и события, наиболее важные из которых рассматриваются в этом разделе.

    1. СозданиекомпонентаtQuery

СозданиекомпонентаTQueryпрактически мало чем не отличается от создания компонентаTTable.

Перенесите в окно дерева объектов компонент TQuery (вкладка BDE) и "положите" его на псевдоним ААА. В окне инспектора объектов в свойстве DatabaseName нового компонента автоматически появится имя локального псевдонима ААА, а в поле Name - имя компонента Query1. Имеет смысл заменить имя компонента на более осмысленное, например, quNakls или quNakls. Слева от компонента в окне дерева объектов появится красный знак вопроса, означающий, что компонент TQuery еще не готов к работе.

Компонент TQuery фактически является набором данных (НД). Однако в отличие от компонента TTable компонент TQuery используется для доступа к данным не какой-либо таблицы БД, а некоторого, определяемого программистом источника данных. Для компонента TTable это соотвтсвующая таблица физической БД, а для компонента TTable это SQL-запрос, который формируется в свойстве SQL запроса.

После определения SQL-запроса исчезнет красный знак вопроса слева от компонента в окне дерева объектов, что свидетельствует о готовности компонента к работе (рисунок 7.1).

Рисунок 4.41 –Окно дерева объектов с вопросом quNakls

Примечание. Как и для набора данных TTable свойство Active = True запроса TQuery позволяет активизировать запрос на этапе проектирования или выполнения программы.

Чтобы в главном окне программы сетка TDBGrid могла отображать данные из запроса quNakls, этому запросу нужно сопоставить собственный источник данных TDataSource. Для этого выделите компонент TDataSource на вкладке Data Access палитры компонентов и затем щелкните на запросе quNakls в окне дерева объектов. В результате будут сформированы поля DataSet и Name Инспектора объектов для этого компонента (рисунок 4.2).

Рисунок 4.42 –Окно инспектора объектов для компонента DataSource3

Окончательный вид модуля данных приведен на рисунке 4.3.

Рисунок 4.43 –Вид модуля даных

Для визуализации результатов запроса необходимо связать компонент DataSource3 с сеткой - компонент TDBGrid, на главной форме. В общем случае каждому запросу сопоставляется своя сетка - компонент TDBGrid. Способ ее создания и использования описан выше при работе с компонентом TTable.

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

Для этого необходимо выбрать соответствующее имя в поле DataSource компонента DBGrid1. Раскройте список свойства DataSource и выберите в нем пункт DataSource3 (рисунок 4.4).

Рисунок 4.44 –Окно инспектора объектов для компонента DBGrid1

Примечание 1. Если бы к этому моменту программист сформировал в свойстве SQL (см. раздел 4.3.1) текст запроса из рисунка4.5и установил свойство Active = True запроса quNakls, то сетка DBGrid1 тут же наполнилась бы данными в соответствии с этим запросом и содержимым источника данных DataSource1, связанным с набором данных НД Nakls.

Примечание 2. Выбор уже существующей сетки DBGrid1 породил одно неудобство, которое сразу видно при выполнении действий из примечания 1 и которое легко преодолевается. Дело в том, что два столбца этой сетки связаны с подстановочными полями таблицы Nakls. Однако запрос может обратиться только к реальным полям таблиц БД. Поэтому соответствующие столбцы сетки не заполняются данными. Для устранения этого недостатка необходимо связать запрос с реальными полями, которые были положены в основу создания подстановочных полей (см. ниже).