Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД_Delphi_Теория_Контр_работа.doc
Скачиваний:
34
Добавлен:
31.05.2015
Размер:
3.15 Mб
Скачать

4.3. Создание запроса с групповыми вычислениями

Создание запроса с групповыми вычислениями осуществляется следующим образом.

1. Создать или выбрать форму для реализации запроса (создание - кнопка New Form на панели инструментов, 4-я слева на панели инструментов, выбор – кнопка Veiw Form (2-я слева на панели инструментов)). В свойствах формы в поле Name можно задать имя, например, Query3Form.

2. Расположить на модуле данных компонент ADOQuery (панель ADO). Для данного компонента настроить следующие свойства: в свойстве Connection выбрать ADOConnection1; в свойстве SQL щелкнуть по кнопке и в открывшемся окне набрать запрос на языке SQL; в свойстве Active выбрать true.

Во вкладке Events модуля данных для события onCreate в процедуре обработки события дописать:

ADOQuery1.Active := true;

Номер компонента может быть отличным от единицы.

3. Расположить на форме для реализации запроса компоненты DataSource (панель Data Access), DBGrid (панель Data Controls).

4. В модуле, соответствующем созданной форме для реализации запросов, для доступа к компонентам модуля данных в разделе implementation выставить uses unit2 (если модуль данных был создан вторым).

5. Установить для компонента DataSource – в свойстве DataSet имя компонента на модуле данных, реализующего запрос, (например, имя_модуля_данных.ADOQuery1 (номер компонента может быть другим)).

Установить для DBGrid – в свойстве DataSource значение DataSource1.

Пример запроса, который выбирает поля Tovar и Zena из таблицы Tovar и суммирует поле Kolvo из таблицы Prihod (сумма по полю количество (Kolvo) получает имя Sum_Kolvo). В запросе записи группируются по полям Tovar, Zena (конструкция GROUP BY T.Tovar, T.Zena). Конструкция WHERE содержит условие связывания двух таблиц (таблицы связаны по полю Tovar) .

SELECT T.Tovar, T.Zena, SUM(P.Kolvo) As Sum_Kolvo

FROM Tovary T, Prihod P

WHERE T.Tovar = P.Tovar

GROUP BY T.Tovar, T.Zena

6. Чтобы выполнить запрос, необходимо в модуле данных установить для ADOQuery в свойстве Active значение True. Результат выполнения запроса будет виден в компоненте DBGrid на форме для реализации запроса.

7. Сохранить произведенные изменения (File, Save All).

4.4. Создание параметрического запроса

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

1. Создать или выбрать форму для реализации запроса (создание - кнопка New Form на панели инструментов, 4-я слева на панели инструментов, выбор – кнопка Veiw Form (2-я слева на панели инструментов)). В свойствах формы в поле Name можно задать имя, например, Query4Form.

2. Расположить на модуле данных компонент ADOQuery (панель ADO). Для данного компонента настроить следующие свойства: в свойстве Connection выбрать ADOConnection1; в свойстве SQL щелкнуть по кнопке и в открывшемся окне набрать запрос на языке SQL.

Параметрами в этом запросе являются имена, перед которыми стоят двоеточия «:». В параметрических запросах параметры заменяют значения, которые могут изменяться в процессе выполнения. Имена параметров произвольны и могут не совпадать с именами полей, которым они ставятся в соответствие. В данном запросе имена параметров совпадают с именами полей (запрос выбирает записи по заданным названию товара Tovar и дате прихода DatPrih).

SELECT Р.* FROM Prihod Р

WHERE (Tovar = :Tovar) AND (DatPrih = :DatPrih)

Закрыть окно, щелкнув по кнопке ОК.

5. В Инспекторе Объектов выбрать свойство Parameters и щелкнуть по кнопке в строке этого свойства. В появившемся окне будут показаны имена всех параметров, введенных в тексте параметрического SQL-запроса. Каждому параметру из списка необходимо поставить в соответствие определенный тип и стартовое значение. Стартовое значение задавать необязательно. Раскрыть список Value и в строке Type задать для Tovar OleStr (String) (текстовое поле), для поля DatPrih задать в строке Type значение Date (поле типа дата).

6. Для активации запроса в свойстве Active выбрать true.

Во вкладке Events модуля данных для события onCreate в процедуре обработки события дописать:

ADOQuery1.Active := true;

Номер компонента может быть отличным от единицы.

7. Расположить на форме для реализации запроса компоненты DataSource (панель Data Access), DBGrid (панель Data Controls).

8. В модуле, соответствующем созданной форме для реализации запросов, для доступа к компонентам модуля данных в разделе implementation выставить uses unit2 (если модуль данных был создан вторым).

9. Всякий раз, когда необходимо изменить значения параметров запроса, программа должна закрыть Query, присвоить значения параметрам и повторно открыть его. Это реализует процедура, которая запускается при щелчке по соответствующей кнопке. Создадим панель, на ней два окна для ввода товара и даты и кнопку вызова процедуры, которая будет запускать параметрический запрос.

10. Поместить в форму панель (компонента Panel на панели Standard). Сделать такой размер панели, чтобы на ней поместились две надписи, два окна и кнопка. Для панели в свойстве Caption стереть название.

11. Создать на панели две надписи (кнопка Label на панели Standard). Для надписей в свойстве Caption задать названия полей (например, Товар и Дата прихода).

12. Создать на панели два текстовых поля (кнопка Edit на панели Standard). Для полей в свойстве Text стереть названия.

13. Создать на панели кнопку (кнопка Button на панели Standard). В свойстве Caption задать Выдать.

14. Двойной щелчок по кнопке открывает окно процедуры обработки события. Создать следующий обработчик события OnClick кнопки Выдать (ADOQuery1 может иметь номер, отличный от единицы).

procedure …

Begin

With имя_модуля_данных.ADOQuery1 do

begin

Close;

Parameters.ParamByName(‘Tovar’).Value := Edit1.Text;

Parameters.ParamByName(‘DatPrih’).Value := StrToDate(Edit1.Text);

Open;

end;

End;

Щелкнуть по кнопке ОК.

Если дата выбирается из календаря (компонент DateTimePicker), то строка присвоения значения параметру будет иметь вид:

Parameters.ParamByName('DatPrih').Value := DateTimePicker1.DateTime;

Для компонента DateTimePicker необходимо стереть значение в строке Time, а в базе данных поле типа даты должно иметь краткий формат отображения даты.

15. Сохранить произведенные изменения и проверить работу запроса. В текстовые поля ввести значения (например, название товара и дату прихода). Для выполнения запроса щелкнуть по кнопке Выдать.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]