Диалоговое окно Query Destination
Диалоговое окно Query Destination
При нажатии любой из кнопок открывается диалоговое окно, в котором определяются дополнительные параметры вывода данных запроса.
Диалоговое окно Query Destination с выбранной опцией Label
Диалоговое окно Query Destination с выбранной опцией Label
Диалоговое окно Query Destination с выбранной опцией Report
Диалоговое окно Query Destination с выбранной опцией Report
Окно примет вид, представленный на рис. 18.3. Оно содержит две кнопки следующего назначения:
Диалоговое окно Query Destination с выбранной опцией Screen
Диалоговое окно Query Destination с выбранной опцией Screen
Область Secondary output (Вторичный вывод) содержит переключатели, указывающие, куда дополнительно направляются результаты запроса.
None (Нет) — вывода результатов запроса не происходит. То printer (На принтер) — результаты запроса выводятся на принтер. То text file (В текстовый файл) — вывод результатов осуществляется в текстовый файл.В области Options (Параметры) диалогового окна расположены два флажка. При установке флажка Suppress column headings (He отображать заголовка столбцов) в отображаемом запросе не указываются заголовки столбцов. Установленный флажок Pause between screens (Пауза между экранами) указывает на необходимость делать паузу при заполнении экрана.
Диалоговое окно Save As HTML
Диалоговое окно Save As HTML
Фраза HAVING
Фраза HAVING
Для применения условий к группам, созданным фразой GROUP BY, используется фраза HAVING, которая играет такую же роль для групп, что и фраза WHERE для записей.
Расширенные средства выборки данных
В главе 9 нами были рассмотрены основные вопросы создания запросов. Результаты запроса отображались в табличном виде на экране. В этой главе рассмотрим, как использовать результаты выполнения запроса для построения диаграмм, создания отчетов, этикеток, а также в программах.
Вывод результатов запроса
По умолчанию Visual FoxPro направляет результат выборки в стандартную результирующую таблицу, которая отображается на экране в режиме Browse (Обзор). Однако вы можете направить результат выборки во вновь создаваемую таблицу, в отчет или в программу Microsoft Graph.
Для изменения направления вывода используется диалоговое окно Query Destination (Результат запроса) (рис. 18.1). Чтобы его открыть, выполните одно из следующих действий.
Нажмите кнопку Query Destination (Результат запроса) на панели инструментов Query Designer (Конструктор запроса). В меню Query (Запрос) выберите команду Query Destination (Результаты запроса).Диалоговое окно Query Destination (Результаты запроса) содержит кнопки, описанные в табл. 18.1.
Использование переменных при формировании запросов
Использование переменных при формировании запросов
При формировании выборки в программах вы можете использовать переменные для определения условий выборки и задания имени таблицы, в которую записываются результаты выборки.
Рассмотрим пример создания запроса, в котором определяется итоговая сумма по каждому заказу. За основу возьмем аналогичный запрос, созданный ранее в интерактивном режиме. В него добавим возможность задания интервала, за который будет осуществляться выборка, а также имени результирующей таблицы.
Откройте новое окно редактирования программы. Для этого в меню File (Файл) выберите команду New (Новый). В открывшемся диалоговом окне выберите опцию Program (Программа) и нажмите кнопку New file (Новый файл). Откройте окно созданного ранее запроса, содержащего выборку из таблиц Ordsalem и Ordsaled с итоговой суммой по каждому заказу. Нажмите кнопку Show the SQL Window (Показать SQL) на панели инструментов Query Designer (Конструктор запроса) или в меню Query (Запрос) выберите команду View SQL (Показать SQL). В окне просмотра выделите команду SELECT и сохраните ее во временном буфере Windows. Скопируйте содержимое буфера Windows в окно редактирования программы. Укажите перед командой SELECT начальную и конечную даты, определяющие промежуток времени, а также значение переменной, которая задает имя результирующей таблицы:dBeg=CTOD("01.11.01") && начальная дата
dEnd=CTOD("30.11.01") && конечная дата
c0utput="0rds" && имя результирующей таблицы
Добавьте в конструкцию SELECT условие задания периода времени, используя переменные dBeg и dEnd:SELECT Ordsalem.cnDoc AS заказ,;
SUM(Ordsaled.nQuant*Ordsaled.nUnitPrice) AS стоимость;
FROM sales!ordsalem INNER JOIN saleslordsaled ;
ON Ordsalem.icdorder = Ordsaled.icdorder;
WHERE Ordsalem.dDoc BETWEEN dBeg AND dEnd;
GROUP BY Ordsalem.icdorder;
INTO TABLE ScOutput
Сохраните программу под именем Ords.prg и проверьте синтаксис. Выполните программу, в результате чего в таблицу ords будет записана итоговая сумма по заказам. В дальнейшем вы можете использовать эту таблицу для просмотра, печати отчета или построения графика.Использование результатов запроса для создания диаграммы
Использование результатов запроса для создания диаграммы
При выборе в диалоговом окне Query Destination (Результаты запроса) кнопки Graph (Диаграмма) строится диаграмма по результатам запроса. Рассмотрим использование данной опции для запроса из таблиц orcisaiem и ordsaied, созданного в главе 9 и содержащего итоговую сумму по заказам.
Откройте созданный ранее запрос. В меню Query (Запрос) выберите команду Query Destination (Результаты запроса). В диалоговом окне Query Destination (Результаты запроса) выберите опцию Graph (Диаграмма) и нажмите кнопку ОК. Диалоговое окно закроется. Запустите на выполнение запрос, нажав кнопку Run (Запустить) на основной панели инструментов. Запускается мастер построения диаграмм. В открывшемся диалоговом окне Graph Wizard (Мастер диаграммы) укажите заказ в качестве поля, значения которого будут использоваться в категориях диаграммы. Для заполнения рядов данных выберите поле стоимость.Для переноса данных используйте мышь. Завершив установку, нажмите кнопку Next (Далее) для перехода к следующему шагу.
На следующем шаге укажите стиль создаваемой диаграммы, нажав на одну из двенадцати кнопок, предлагаемых Visual FoxPro. Затем нажмите кнопку Next (Далее) для перехода к следующему шагу. На последнем шаге работы мастера задайте заголовок, который будет располагаться над диаграммой. В этом диалоговом окне можно нажать кнопку Preview (Просмотр) и просмотреть созданную диаграмму. Нажмите кнопку Finish (Готово). В открывшемся диалоговом окне введите имя таблицы, в которой собираетесь сохранить данные для построения диаграммы. На экране открывается созданная диаграммаИспользование результатов запроса в отчете
Использование результатов запроса в отчете
Для использования результатов запроса в отчете в диалоговом окне Query Destination (Результаты запроса) выберите опцию Report (Отчет).
Оператор EXISTS
Оператор EXISTS
Оператор EXISTS принимает значение True (Истина), если результат выполнения подзапроса является непустым множеством. Если порожденное подзапросом множество пусто, то EXISTS принимает значение False (Ложь). Оператор NOT EXISTS работает в точности наоборот. Он истинен, если результат подзапроса пуст, и ложен в противном случае.
Оператор UNION
Оператор UNION
Для объединения результатов запросов используется оператор UNION. Результатом объединения является результирующее множество, состоящее из всех строк, входящих в какое-либо одно или в оба результирующих множества объединяемых запросов.
В качестве примера выберем список покупателей, которые живут в Новгороде или покупают товар с кодом 2103:
SELECT icdCustomer ;
FROM Customer ;
WHERE cCity = 'Новгород ' ;
UNION ;
SELECT icdCustomer;
FROM Ordsalem, Ordsaled ;
WHERE Ordsalem.icdOrder=Ordsaled.icdOrder ;
AND icdGoods = 2103
Из результата выборки, использующей оператор UNION, исключаются повторяющиеся строки. Для отображения их в результирующей выборке используйте опцию ALL.
Подзапросы
Подзапросы
При определении условия выборки можно применять вложенные запросы, которые называются подзапросами. Например, определим список наиболее дорогих товаров, цены которых ниже максимальной цены не более, чем на 10%.
SELECT icdGoods FROM Goods ;
WHERE nUnitPrice >;
(SELECT 0.9 * MAX (nUnitPrice) ;
FROM Goods)
Представление результатов запроса на экране
Представление результатов запроса на экране
На рис. 18.2 показано диалоговое окно Query Destination (Результаты запроса), в котором выбрана опция Screen (Экран).
Вы не можете использовать фразу
Предупреждение
Вы не можете использовать фразу HAVING отдельно от фразы GROUP BY.
с использованием оператора UNION может
Предупреждение
Фраза ORDER BY в запросе с использованием оператора UNION может входить только в последний оператор SELECT.
Применение в программах команды Select
Применение в программах команды Select
При создании приложений для выборки данных широко применяется команда SELECT. В отличие от интерактивного режима, при программировании вы можете использовать переменные и пользовательские функции. Кроме того, в программах вы можете использовать более сложные выборки, включая вложенные запросы, кванторы существования и объединение запросов.
Просмотр HTML-файла в окне Web-браузера
Просмотр HTML-файла в окне Web-браузера
Просмотр результатов запроса в режиме Browse
Просмотр результатов запроса в режиме Browse
По умолчанию Visual FoxPro помещает результаты запроса во временную таблицу и выводит ее на экран в режиме Browse (Обзор). После закрытия окна временная таблица удаляется из памяти. Этот режим удобен в том случае, если вы хотите просто просмотреть результаты запроса.
Сохранение результатов запроса в формате HTML
Сохранение результатов запроса в формате HTML
Visual FoxPro позволяет сохранять результат выполнения запроса, как и любую другую таблицу, в формате HTML. Для этого предназначена команда Save As HTML (Сохранить как HTML файл) из меню File (Файл), открывающая соответствующее диалоговое окно (рис. 18.5), содержащее три переключателя, приведенных в табл. 18.2.
Сохранение результатов запроса в курсоре
Сохранение результатов запроса в курсоре
В том случае, если вы хотите ссылаться на результаты запроса из программы, вам необходимо сохранить их в курсоре. Курсор является временной таблицей, доступной только для чтения и удаляемой из памяти при закрытии курсора.
Для направления результатов запроса в курсор в диалоговом окне Query Destination (Результаты запроса) установите опцию Cursor (Курсор), в поле Cursor name (Имя курсора) введите имя курсора и нажмите кнопку ОК. Введенное имя будет служить псевдонимом для ссылки на результаты запроса.
Сохранение результатов запроса в таблице
Сохранение результатов запроса в таблице
Для сохранения результатов запроса в таблице предназначена кнопка Table (
с именами файлов при работе
Совет
Для повышения быстродействия и избежания проблем, связанных с именами файлов при работе в сети, небольшие курсоры желательно держать в памяти или на локальном диске. При увеличении размера курсоров и отсутствии достаточного количества места Visual FoxPro записывает их на физический носитель.
Создание этикеток с использованием результатов запроса
Создание этикеток с использованием результатов запроса
Опция Label (Этикетки) диалогового окна Query Destination (Результаты запроса) позволяет использовать результаты запроса для создания этикеток. При установке этой опции окно имеет вид, представленный на рис. 18.4. Параметры окна аналогичны опциям вывода запроса в отчет.
Назначение кнопок диалогового окна Query Destination
Таблица 18.1. Назначение кнопок диалогового окна Query Destination
Кнопка | Назначение |
Browse (Обзор) | Сохраняет результат выборки в стандартной результирующей таблице и отображает результаты запроса в режиме Browse (Обзор) на экране |
Cursor (Курсор) | Обеспечивает временное хранение результатов запроса в виде, доступном только для чтения |
Graph (Диаграмма) | Запускает Microsoft Graph (приложение OLE) для создания графиков и диаграмм |
Screen (Экран) | Отображает результаты выборки в активном окне |
Table |
Переключатели диалогового окна Save As HTML
Таблица 18.2. Переключатели диалогового окна Save As HTML
Переключатели | Назначение |
Save file for later use (Сохранить файл) | Сохраняет результат запроса на диске в формате файла HTML |
Save and edit file (Сохранить файл и открыть для редактирования) | Сохраняет результат запроса на диске в формате файла HTML и открывает его для редактирования (рис. 18.5) |
Save file and view in web browser
(Сохранить файл и открыть для просмотра в Web-браузере) |
Сохраняет результат запроса на диске в формате файла HTML и открывает его для просмотра в окне Web-браузера (рис. 18. 6) |
Поле, расположенное в нижней части диалогового окна Save As HTML (Сохранить как HTML файл), позволяет указать расположение сохраняемого файла. Если хотите изменить указанный по умолчанию адрес, воспользуйтесь кнопкой открытия диалогового окна Save As (Сохранить как), расположенной справа от поля, укажите имя создаваемого файла с расширением НТМ, а также папку, в которой файл будет сохранен.
Таблица диалогового окна Query...
Таблица диалогового окна Query Destination (Результаты запроса). При ее нажатии становится доступным поле Table name (Имя таблицы), используемое для ввода имени таблицы, в которой будут сохранены результаты. Для указания папки, в которой требуется сохранить таблицу, воспользуйтесь расположенной справа от поля кнопкой, открывающей диалоговое окно Open (Открыть).
Таблицу с результатами запроса можно в любой момент открыть, просмотреть, ввести в нее изменения.
Вывод результатов запроса
Вывод результатов запроса Просмотр результатов запроса в режиме Browse Сохранение результатов запроса в курсоре Сохранение результатов запроса в таблице Использование результатов запроса для создания диаграммы Представление результатов запроса на экране Использование результатов запроса в отчете Создание этикеток с использованием результатов запроса Сохранение результатов запроса в формате HTML Применение в программах команды Select Использование переменных при формировании запросов Подзапросы Фраза HAVING Оператор EXISTS Оператор UNION
в том, что WHERE применяется
Замечание
Разница между фразами WHERE и HAVING состоит в том, что WHERE применяется к строкам, в то время как HAVING применяется к группам.
Запрос может содержать и фразу WHERE, и фразу HAVING. В этом случае первой выполняется фраза WHERE, поскольку она выполняется до разбиения на группы.
Рассмотрим пример выборки городов, в которых имеется более десяти покупателей:
SELECT cCountry ;
FROM Customer ;
GROUP BY cCountry;
HAVING COUNT(*)>10
и NOT EXISTS всегда помещаются
Замечание
Операторы EXISTS и NOT EXISTS всегда помещаются перед подзапросом.
В качестве примера выберем наименования товаров, которые заказали покупатели из Новгорода:
SELECT cNmGoods ;
FROM Goods ;
WHERE EXISTS ;
(SELECT * ;
FROM Customer, Ordsalem, Ordsaled ;
WHERE Ordsalem.icdOrder=Ordsaled.icdOrder ;
AND Ordsalem.iCdCustomer = Customer.iCdCustomer ;
AND Ordsaled.iCdGoods = Goods.iCdGoods ;
AND Customer.cCity = 'Новгород')
Если при выдаче информации на
Замечание
Если при выдаче информации на экран делаются паузы, то при повторном выводе заголовки столбцов будут повторяться каждый раз при заполнении нового экрана.
расположенное справа от кнопки Open
Замечание
Поле, расположенное справа от кнопки Open Report (Открыть отчет), предназначено для ввода имени нового отчета.
Кроме того, в диалоговом окне Query Destination (Результаты запроса) расположены три флажка. При установке флажка Page preview (Просмотр страницы) отчет выводится в окно просмотра. Флажок Console on (Включить консоль) дублирует вывод отчета в текущем окне, а флажок Eject page before report (Пропускать страницу перед отчетом) указывает на необходимость печати отчета с начала страницы.
При установке флажка Page preview (Просмотр страницы) вывод отчета на принтер или в текстовый файл запрещен. Для печати отчета или записи его в файл необходимо снова запустить запрос на выполнение.
Переключатели области Secondary output (Вторичный вывод) указывают, куда направлять дополнительный вывод результатов запроса:
None — не осуществлят; То printer — на принтер; То text file — в текстовый файл. При установке флажка Suppress column headings (He отображать заголовки столбцов) области Options (Параметры) при формировании отчета не указываются заголовки столбцов. Флажок Summary information only (Только итоговая информация) предоставляет возможность не выводить промежуточные строки, а печатать только заголовки, группы, страницы и итоговую часть отчета.