Visual FoxPro   Обзор графических пакетов 3GL   Компьютерная графика к экономической информатике   к 4GL - визуальному программированию

Программирование в VisualFoxPro 7.0

Расширенные средства выборки данных

В главе 9 нами были рассмотрены основные вопросы создания запросов. Результаты запроса отображались в табличном виде на экране. В этой главе рассмотрим, как использовать результаты выполнения запроса для построения диаграмм, создания отчетов, этикеток, а также в программах.

  Вывод результатов запроса

По умолчанию Visual FoxPro направляет результат выборки в стандартную результирующую таблицу, которая отображается на экране в режиме Browse (Обзор). Однако вы можете направить результат выборки во вновь создаваемую таблицу, в отчет или в программу Microsoft Graph.

Для изменения направления вывода используется диалоговое окно Query Destination (Результат запроса) (рис. 18.1). Чтобы его открыть, выполните одно из следующих действий.

Диалоговое окно Query Destination (Результаты запроса) содержит кнопки, описанные в табл. 18.1.

Таблица 18.1. Назначение кнопок диалогового окна Query Destination

Кнопка Назначение
Browse (Обзор) Сохраняет результат выборки в стандартной результирующей таблице и отображает результаты запроса в режиме Browse (Обзор) на экране
Cursor (Курсор) Обеспечивает временное хранение результатов запроса в виде, доступном только для чтения
Graph (Диаграмма) Запускает Microsoft Graph (приложение OLE) для создания графиков и диаграмм
Screen (Экран) Отображает результаты выборки в активном окне
Table (Таблица) Сохраняет результаты запроса в таблице
Report (Отчет) Отображает результат выборки в виде отчета
Label (Этикетка) Отображает результат выборки в виде этикетки
 

gl18-1.jpg

Рис. 18.1. Диалоговое окно Query Destination

При нажатии любой из кнопок открывается диалоговое окно, в котором определяются дополнительные параметры вывода данных запроса.

  Просмотр результатов запроса в режиме Browse

По умолчанию Visual FoxPro помещает результаты запроса во временную таблицу и выводит ее на экран в режиме Browse (Обзор). После закрытия окна временная таблица удаляется из памяти. Этот режим удобен в том случае, если вы хотите просто просмотреть результаты запроса.

  Сохранение результатов запроса в курсоре

В том случае, если вы хотите ссылаться на результаты запроса из программы, вам необходимо сохранить их в курсоре. Курсор является временной таблицей, доступной только для чтения и удаляемой из памяти при закрытии курсора.

Для направления результатов запроса в курсор в диалоговом окне Query Destination (Результаты запроса) установите опцию Cursor (Курсор), в поле Cursor name (Имя курсора) введите имя курсора и нажмите кнопку ОК. Введенное имя будет служить псевдонимом для ссылки на результаты запроса.

Совет

Для повышения быстродействия и избежания проблем, связанных с именами файлов при работе в сети, небольшие курсоры желательно держать в памяти или на локальном диске. При увеличении размера курсоров и отсутствии достаточного количества места Visual FoxPro записывает их на физический носитель.

  Сохранение результатов запроса в таблице

Для сохранения результатов запроса в таблице предназначена кнопка Table (Таблица) диалогового окна Query Destination (Результаты запроса). При ее нажатии становится доступным поле Table name (Имя таблицы), используемое для ввода имени таблицы, в которой будут сохранены результаты. Для указания папки, в которой требуется сохранить таблицу, воспользуйтесь расположенной справа от поля кнопкой, открывающей диалоговое окно Open (Открыть).

Таблицу с результатами запроса можно в любой момент открыть, просмотреть, ввести в нее изменения.

  Использование результатов запроса для создания диаграммы

При выборе в диалоговом окне Query Destination (Результаты запроса) кнопки Graph (Диаграмма) строится диаграмма по результатам запроса. Рассмотрим использование данной опции для запроса из таблиц orcisaiem и ordsaied, созданного в главе 9 и содержащего итоговую сумму по заказам.

  1. Откройте созданный ранее запрос.
  2. В меню Query (Запрос) выберите команду Query Destination (Результаты запроса).
  3. В диалоговом окне Query Destination (Результаты запроса) выберите опцию Graph (Диаграмма) и нажмите кнопку ОК. Диалоговое окно закроется.
  4. Запустите на выполнение запрос, нажав кнопку Run (Запустить) на основной панели инструментов.
  5. Запускается мастер построения диаграмм. В открывшемся диалоговом окне Graph Wizard (Мастер диаграммы) (рис. 18.2) укажите заказ в качестве поля, значения которого будут использоваться в категориях диаграммы. Для заполнения рядов данных выберите поле стоимость.

Для переноса данных используйте мышь. Завершив установку, нажмите кнопку Next (Далее) для перехода к следующему шагу.

gl18-2.jpg

Рис. 18.2. Выбор расположения полей на диаграмме

  1. На следующем шаге укажите стиль создаваемой диаграммы, нажав на одну из двенадцати кнопок, предлагаемых Visual FoxPro (рис. 18.3). Затем нажмите кнопку Next (Далее) для перехода к следующему шагу.
gl18-3.jpg

Рис. 18.3. Выбор стиля диаграммы

  1. На последнем шаге работы мастера задайте заголовок, который будет располагаться над диаграммой (рис. 18.4). В этом диалоговом окне можно нажать кнопку Preview (Просмотр) и просмотреть созданную диаграмму.
gl18-4.jpg

Рис. 18.4. Задание заголовка для диаграммы

  1. Нажмите кнопку Finish (Готово). В открывшемся диалоговом окне введите имя таблицы, в которой собираетесь сохранить данные для построения диаграммы. На экране открывается созданная диаграмма (рис. 18.5).
gl18-5.jpg

Рис. 18.5. Созданная диаграмма

  Представление результатов запроса на экране

На рис. 18.6 показано диалоговое окно Query Destination (Результаты запроса), в котором выбрана опция Screen (Экран).

gl18-6.jpg

Рис. 18.6. Диалоговое окно Query Destination с выбранной опцией Screen

Область Secondary output (Вторичный вывод) содержит переключатели, указывающие, куда дополнительно направляются результаты запроса.

В области Options (Параметры) диалогового окна расположены два флажка. При установке флажка Suppress column headings (He отображать заголовка столбцов) в отображаемом запросе не указываются заголовки столбцов. Установленный флажок Pause between screens (Пауза между экранами) указывает на необходимость делать паузу при заполнении экрана.

Замечание

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

  Использование результатов запроса в отчете

Для использования результатов запроса в отчете в диалоговом окне Query Destination (Результаты запроса) выберите опцию Report (Отчет).

gl18-7.jpg

Рис. 18.7. Диалоговое окно Query Destination с выбранной опцией Report

Окно примет вид, представленный на рис. 18.7. Оно содержит две кнопки следующего назначения:

Замечание

Поле, расположенное справа от кнопки Open Report (Открыть отчет), предназначено для ввода имени нового отчета.

Кроме того, в диалоговом окне Query Destination (Результаты запроса) расположены три флажка. При установке флажка Page preview (Просмотр страницы) отчет выводится в окно просмотра. Флажок Console on (Включить консоль) дублирует вывод отчета в текущем окне, а флажок Eject page before report (Пропускать страницу перед отчетом) указывает на необходимость печати отчета с начала страницы.

При установке флажка Page preview (Просмотр страницы) вывод отчета на принтер или в текстовый файл запрещен. Для печати отчета или записи его в файл необходимо снова запустить запрос на выполнение.

Переключатели области Secondary output (Вторичный вывод) указывают, куда направлять дополнительный вывод результатов запроса:

При установке флажка Suppress column headings (He отображать заголовки столбцов) области Options (Параметры) при формировании отчета не указываются заголовки столбцов. Флажок Summary information only (Только итоговая информация) предоставляет возможность не выводить промежуточные строки, а печатать только заголовки, группы, страницы и итоговую часть отчета.

  Создание этикеток с использованием результатов запроса

Опция Label (Этикетки) диалогового окна Query Destination (Результаты запроса) позволяет использовать результаты запроса для создания этикеток. При установке этой опции окно имеет вид, представленный на рис. 18.8. Параметры окна аналогичны опциям вывода запроса в отчет.

gl18-8.jpg

Рис. 18.8. Диалоговое окно Query Destination с выбранной опцией Label

  Сохранение результатов запроса в формате HTML

Visual FoxPro позволяет сохранять результат выполнения запроса, как и любую другую таблицу, в формате HTML. Для этого предназначена команда Save As HTML (Сохранить как HTML файл) из меню File (Файл), открывающая соответствующее диалоговое окно (рис. 18.9), содержащее три переключателя, приведенных в табл. 18.2.

gl18-9.jpg

Рис. 18.9. Диалоговое окно Save As HTML

gl18-10.jpg

Рис. 18.10. Окно редактирования запроса в формате HTML

Таблица 18.2. Переключатели диалогового окна Save As HTML

Переключатели Назначение
Save file for later use (Сохранить файл) Сохраняет результат запроса на диске в формате файла HTML
Save and edit file (Сохранить файл и открыть для редактирования) Сохраняет результат запроса на диске в формате файла HTML и открывает его для редактирования (рис. 18.10}
Save file and view in web browser

(Сохранить файл и открыть для просмотра в Web-браузере)

Сохраняет результат запроса на диске в формате файла HTML и открывает его для просмотра в окне Web-браузера (рис. 18. 11}

Поле, расположенное в нижней части диалогового окна Save As HTML (Сохранить как HTML файл), позволяет указать расположение сохраняемого файла. Если хотите изменить указанный по умолчанию адрес, воспользуйтесь кнопкой открытия диалогового окна Save As (Сохранить как), расположенной справа от поля, укажите имя создаваемого файла с расширением НТМ, а также папку, в которой файл будет сохранен.

gl18-11.jpg

Рис. 18.11. Просмотр HTML-файла в окне Web-браузера

  Применение в программах команды Select

При создании приложений для выборки данных широко применяется команда SELECT. В отличие от интерактивного режима, при программировании вы можете использовать переменные и пользовательские функции. Кроме того, в программах вы можете использовать более сложные выборки, включая вложенные запросы, кванторы существования и объединение запросов.

  Использование переменных при формировании запросов

При формировании выборки в программах вы можете использовать переменные для определения условий выборки и задания имени таблицы, в которую записываются результаты выборки.

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

  1. Откройте новое окно редактирования программы. Для этого в меню File (Файл) выберите команду New (Новый).
  2. В открывшемся диалоговом окне выберите опцию Program (Программа) и нажмите кнопку New file (Новый файл).
  3. Откройте окно созданного ранее запроса, содержащего выборку из таблиц Ordsalem и Ordsaled с итоговой суммой по каждому заказу.
  4. Нажмите кнопку Show the SQL Window (Показать SQL) на панели инструментов Query Designer (Конструктор запроса) или в меню Query (Запрос) выберите команду View SQL (Показать SQL).
  5. В окне просмотра выделите команду SELECT и сохраните ее во временном буфере Windows.
  6. Скопируйте содержимое буфера Windows в окно редактирования программы.
  7. Укажите перед командой SELECT начальную и конечную даты, определяющие промежуток времени, а также значение переменной, которая задает имя результирующей таблицы:

dBeg=CTOD("01.11.01") && начальная дата

dEnd=CTOD("30.11.01") && конечная дата

c0utput="0rds" && имя результирующей таблицы

  1. Добавьте в конструкцию 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

  1. Сохраните программу под именем Ords.prg и проверьте синтаксис.
  2. Выполните программу, в результате чего в таблицу ords будет записана итоговая сумма по заказам (рис 18.12). В дальнейшем вы можете использовать эту таблицу для просмотра, печати отчета или построения графика.
gl18-12.jpg

Рис 18.12. Программа и полученная в результате ее выполнения таблица Ords

  Подзапросы

При определении условия выборки можно применять вложенные запросы, которые называются подзапросами. Например, определим список наиболее дорогих товаров, цены которых ниже максимальной цены не более, чем на 10%.

SELECT icdGoods FROM Goods ;

WHERE nUnitPrice >;

(SELECT 0.9 * MAX (nUnitPrice) ;

FROM Goods)

  Фраза HAVING

Для применения условий к группам, созданным фразой GROUP BY, используется фраза HAVING, которая играет такую же роль для групп, что и фраза WHERE для записей.

Замечание

Разница между фразами WHERE и HAVING состоит в том, что WHERE применяется к строкам, в то время как HAVING применяется к группам.

Запрос может содержать и фразу WHERE, и фразу HAVING. В этом случае первой выполняется фраза WHERE, поскольку она выполняется до разбиения на группы.

Рассмотрим пример выборки городов, в которых имеется более десяти покупателей:

SELECT cCountry ;

FROM Customer ;

GROUP BY cCountry;

HAVING COUNT(*)>10

Предупреждение

Вы не можете использовать фразу HAVING отдельно от фразы GROUP BY.

  Оператор EXISTS

Оператор EXISTS принимает значение True (Истина), если результат выполнения подзапроса является непустым множеством. Если порожденное подзапросом множество пусто, то EXISTS принимает значение False (Ложь). Оператор 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 = 'Новгород')

  Оператор 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.

Предупреждение

Фраза ORDER BY в запросе с использованием оператора UNION может входить только в последний оператор SELECT.

Visual FoxPro   Обзор графических пакетов 3GL   Компьютерная графика к экономической информатике   к 4GL - визуальному программированию

Знаете ли Вы, что такое "Большой Взрыв"?
Согласно рупору релятивистской идеологии Википедии "Большой взрыв (англ. Big Bang) - это космологическая модель, описывающая раннее развитие Вселенной, а именно - начало расширения Вселенной, перед которым Вселенная находилась в сингулярном состоянии. Обычно сейчас автоматически сочетают теорию Большого взрыва и модель горячей Вселенной, но эти концепции независимы и исторически существовало также представление о холодной начальной Вселенной вблизи Большого взрыва. Именно сочетание теории Большого взрыва с теорией горячей Вселенной, подкрепляемое существованием реликтового излучения..."
В этой тираде количество нонсенсов (бессмыслиц) больше, чем количество предложений, иначе просто трудно запутать сознание обывателя до такой степени, чтобы он поверил в эту ахинею.
На самом деле взорваться что-либо может только в уже имеющемся пространстве.
Без этого никакого взрыва в принципе быть не может, так как "взрыв" - понятие, применимое только внутри уже имеющегося пространства. А раз так, то есть, если пространство вселенной уже было до БВ, то БВ не может быть началом Вселенной в принципе. Это во-первых.
Во-вторых, Вселенная - это не обычный конечный объект с границами, это сама бесконечность во времени и пространстве. У нее нет начала и конца, а также пространственных границ уже по ее определению: она есть всё (потому и называется Вселенной).
В третьих, фраза "представление о холодной начальной Вселенной вблизи Большого взрыва" тоже есть сплошной нонсенс.
Что могло быть "вблизи Большого взрыва", если самой Вселенной там еще не было? Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution