Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка№6 21.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

10.6. Запросы с выбираемыми критериями

Пусть из таблицы Patienttab требуется выбрать служащих, удовлетворяющих слудующим условиям:

  1. фамилия начинается с определенных символов;

  2. они имеют определенную группу риска;

  3. Дата рождения, начиная с определенного числа.

При этом может быть выбрано одно, два или три условия для формирования запроса.

Для формирования данного запроса создадим форму, представленную на рис. 13.

Р ис. 13. Форма для формирования запроса

Выбор условий формирования запроса определяется тремя переключателями Check1, Check2, Check3. В компонент Text1 вводятся начальные символы фамилии. Из выпадающего списка Combo1 выбирается профессия служащих, для этого в свойстве RowSourceType выбрано значение 1-Value, а свойству RowSource присвоено значение тюард,пи- лот,борттехник. Компонент Text2 предназначен для ввода даты поступления на работу. Текст запроса записан в методе Click кнопки Выбрать:

public fz,risk,dat && объявление переменных

if ThisForm.Check1.Value=1 && прверка выбора первого условия

fz=RTRIM(ThisForm.Text1.Text) && значение нач. букв фамилии если первое условие выбрано

else fz='' '' && если первое условие не выбрано (начало фамилии с любого символа)

endif

if ThisForm.Check2.Value=1 && прверка выбора второго условия

risk=RTRIM(ThisForm.Combo1.Text) && выбранная профессия если второе условие выбрано

else

risk='' '' && если второе условие не выбрано (любая профессия)

endif

if ThisForm.Check3.Value=1 && прверка выбора третьего условия

dat=ctod(RTRIM(ThisForm.Text2.Text)) && дата поступления на работу если третье условие выбрано

else

dat={^1800-01-01} &&если третье условие не выбрано (дата, заведомо меньшая любой даты из таблицы)

endif

SELECT patienttab.surnpt, patienttab.namept, patienttab.patrpt, patienttab.datar, patienttab.grouprisk;

From RegistryBD!patienttab;

WHERE patienttab.surnpt LIKE fz+"%" AND patienttab.grouprisk=risk and patienttab.datar between dat and date();

order by surnpt;

П усть в таблицу PatientTab занесены следующие данные (рис. 14).

Рис. 14. Содержание таблицы PatientTab

Пусть требуется выбрать всех инвалидов, родившихся с 1 января 1950 года и чья фамилия начинается на букву Г (рис. 15).

Р ис. 15. Выбор условий для запроса

Тогда результат работы будет иметь следующий вид (рис. 16):

Рис. 16. Результат выбора

Можно выводить результат запроса непосредственно на форму, используя объект Grid. Для этого необходимо добавить объект Grid, его свойству RecordSousceType присвоить значение 0 (Table). Результат выполнения запроса будет записываться в итоговую таблицу Rez, которая будет выводиться в Grid, при этом в текст программы необходимо внести следующие изменения (подчеркнутые строки):

public fz,risk,dat && объявление переменных

if ThisForm.Check1.Value=1 && прверка выбора первого условия

fz=RTRIM(ThisForm.Text1.Text) && значение нач. букв фамилии если первое условие выбрано

else fz='' '' && если первое условие не выбрано (начало фамилии с любого символа)

endif

if ThisForm.Check2.Value=1 && прверка выбора второго условия

risk=RTRIM(ThisForm.Combo1.Text) && выбранная профессия если второе условие выбрано

else

risk='' '' && если второе условие не выбрано (любая профессия)

endif

if ThisForm.Check3.Value=1 && прверка выбора третьего условия

dat=ctod(RTRIM(ThisForm.Text2.Text)) && дата поступления на работу если третье условие выбрано

else

dat={^1800-01-01} &&если третье условие не выбрано (дата, заведомо меньшая любой даты из таблицы)

endif

SELECT patienttab.surnpt, patienttab.namept, patienttab.patrpt, patienttab.datar, patienttab.grouprisk;

From RegistryBD!patienttab;

WHERE patienttab.surnpt LIKE fz+"%" AND patienttab.grouprisk=risk and patienttab.datar between dat and date();

order by surnpt;

into table Rez && запись результата в итоговую таблицу Rez

ThisForm.Grid1.RecordSource="Rez.dbf" && вывод итоговой таблицы Rez в объекте Grid

Т огда результат выполнения приведенного выше примера будет выведен в объекте Grid (рис. 17).

Рис. 17. Модифицированная форма