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

Для передачи параметров может служить свойство DataSource компонента TQuery.Фактически свойство DataSource указывает, где автоматически следует искать конкретные значения для параметров запроса.

Для того чтобы задать источник данных для параметров запроса раскройте список его свойства DataSource и выберите требуемый источник данных. В рассматриваемом примере для иллюстрации такого выбора можно задать DataSource1 (рисунок 4.12), так как он связан с набором tbNakls.

Рисунок 4.53 –Окно инспектора объектов для запроса quNakls

Если это свойство определено, явные присваивания значений параметрам не производятся, то есть не используются операторы присваивания типа

quNakls.Params[0].AsDate := '02.03.2000';

quNakls.ParamByName('DATE').Value := '02.03.2000';

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

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

Если теперь компонент DBGrid1 связан с источником данныхDataSource1, то в качестве выделенной строкиDataSource1 будет выступать выделенная строкаDBGrid1.

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

      1. Связь главный-детальный с компонентомTQuery в качестве детального набора данных

В предыдущем подразделе показано как с помощью компонента TDataSource1и связанного с ним компонентаTDBGrid1 можно реализовать связьглавный-детальный, еслидетальныйНДсоздан с помощью компонентаTQuery.

Рассмотрим следующий пример, взятый из реальной системы. Пусть имеет место форма, отражающая связь главный-детальныймежду двумя запросамиTQuery-quNagrPrepGlbиquNagrPrepDtl.

а)

б)

в)

Рисунок 4.54 – Форма, отражающая связьглавный-детальныймежду запросамиquNagrPrepGlbиquNagrPrepDtl

Источник данных DataSource1связан с,формируемым запросомquNagrPrepGlbи содержащим, в частности, полеFIO (рисунок 4.13, а).

Запрос quNagrPrepDtlсвязан с источником данныхDataSource1, который содержит, в частности полеFIO (рисунок 4.13,б).

Текст запроса quNagrPrepGlb, формирующийНДсвязанный с источником данныхDataSource1, достаточно громоздок, но нас интересует в нем полеFIO.

SELECT FIO и т.д.

FROM KAFEDRA, NAGRPR

WHERE KAFEDRA.CodPrep = NAGRPR.NPCodPrep

Текст запроса quNagrPrepDtlтакже достаточно громоздок, но нас интересует в нем параметр:FIO, который совпадает с именем поляFIOвНД, связанном сDataSource1.

SELECT DIS.DIS, FAK.FAK и т.д.

FROM NAGRPR, KAFEDRA

WHERE NAGRPR.NPCODPREP = KAFEDRA.CODPREP AND

KAFEDRA.FIO = :FIO

В качестве значения параметра запроса :FIOбудут выбраны значения соответствующего поляFIOвыделенной строкиDataSource1. КомпонентDBGrid1 связан с источником данныхDataSource1, поэтому в качестве выделенной строкиDataSource1 выступает выделенная строкаDBGrid1(рисунок4.13, в).