Создание отчетов и работа с ними
Классификация форм
Создание форм для управления базами данных
Реализация простейших функций СУБД в среде Visual Basic
Среда Visual Basic позволяет создавать формы для управления данными, хранимыми в различных форматах, например, Access, dBase, Paradox и др. Наиболее хорошо документировано управление данными формата Access, т.к. фирма Microsoft усиленно поддерживает пакет MS Office, в который входит и СУБД Access.
Различают три основных типа форм: простая форма (Single), табличная (Grid) и составная (Master/Detail) для связанных таблиц (рис. 6.7а, б, и рис. 6.8 соответственно).
а) | б) |
Рис. 6.7. Простая (а) и табличная (б) формы для работы с базами данных | |
Рис. 6.8. Составная форма для работы с базами данных | Простая форма предназначена для работы с одной записью таблицы базы данных. Табличная форма реализует работу с базой данных в режиме таблицы, позволяющей видеть в окне и обрабатывать несколько записей. Сложная форма позволяет обрабатывать связанные таблицы, одна из которых объявляется главной, а вторая подчиненной. Для их связи выделяется специальное ключевое поле. |
Например, на рис. 6.8, в верхней части формы показан фрагмент одной записи главной таблицы, содержащей поля Code, Name, Dolgn, Tarif, а в нижней части в табличном режиме показаны все записи из подчиненной таблицы с полями Code, Namea, Tel, относящиеся к показанной записи главной таблицы. Ключевым полем является поле Code. Обычно ключевое поле, выделенное для связи таблиц, на формах не показывается
6.4.1.2. Создание форм штатными средствами
среды Visual Basic
Для реализации функций управления базой данных среда Visual Basic предоставляет два мастера форм базы данных, которые в интерактивном режиме создают нужный инструмент для работы с базой данных.
Простую форму позволяет создать описанная выше утилита Data Form Designer. Более мощным инструментом является утилита Data Form Wizard – мастер форм баз данных. Как показал опыт, эти инструменты создают код программы, содержащий ошибку, которая проявляется при попытке ввести новую запись в таблицу данных. После рассмотрения процесса создания описанных форм будет рассмотрен способ устранения обнаруженной ошибки.
Рассмотрим процесс создания описанных форм в среде Data Form Wizard. Вызов этого инструмента производится командой Data Form Wizard из субменю "Add-Ins" среды Visual Basic 5.0 или субменю "Расширения" среды Visual Basic 6.0. Команда открывает окно Data Form Wizard – Introduction (Введение). Это окно ничем не примечательно и может быть в дальнейшем отключено флажком "Skip this screen…". Для перехода в последующие окна достаточно щелкать по кнопке "Next". Вторым откроется окно Data Form Wizard – Database Type (рис. 6.9,а), позволяющее выбрать тип базы данных. Окно Data Form Wizard – Database (рис. 6.9,б) позволит определить имя файла и доступные объекты базы – таблицы (Tables) и запросы (Queries). Запросы позволяют организовать поиск данных и вычисления в пределах записи.
В последующих окнах (рис. 6.9, в,г,д,е) во всех случаях создания форм необходимо определить тип формы, указать имена полей, устанавливаемых на форму, набор кнопок управления формой и имя формы. Завершение процесса создания формы производится щелчком по кнопке "Finish".
При создании табличной формы (рис. 6.8,б) следует во время определения структуры базы данных (рис. 6.2) создать индекс в окне Index List. Создание индекса начинается щелчком по кнопке "Add Index", в результате чего открывается одноименное окно (рис. 6.10). В этом окне необходимо в текстовом окне "Name" указать имя индекса, а в окне списка "Avalable Fields" выбрать имена полей, комбинация значений которых однозначно определит запись базы данных. Эти имена полей появятся в окне списка "Indexed Fields".
Далее необходимо включить флажок "Primery" – первичный индекс, флажок "Unique" следует включать только в случаях неповторяющихся значений индексов.
а) | б) | ||
в) | г) | ||
д) | е) | ||
ж) | з) | ||
Рис. 6.9. Окна мастера форм Data Form Wizard | |||
Рис. 6.10. Окно Add Index | Например, для формы, приведенной на рис. 6.7,б был создан индекс PrimeryKey (имя произвольно), включающий в себя поле "Code" с включением флажков "Primary" и "Unique". Несколько сложнее процесс создания формы Master/Detail. Как уже указывалось выше, эта форма служит для отображения двух связанных таблиц и состоит из простой формы, в которой отображается одна запись главной таблицы и табличной формы, в которой отображаются все записи подчиненной |
таблицы, относящиеся к демонстрируемой на форме записи главной таблицы.
При описании структуры таблиц в них вводятся специальные поля, предназначенные для связи таблиц. В примере, описанном выше (рис. 6.8), такими полями в обеих таблицах являются поля Code, имеющие одинаковый тип и длину данных.
В главной таблице поле связи объявляется индексом (так, как это описано для ленточной формы) с включением флажков "Primary" и "Unique", что указывает на главенство первой таблицы и на неповторяемость значений индекса (в описываемом примере – поля Code).
В подчиненной таблице должно быть соответствующее поле с таким же типом данных и длиной. Это поле также объявляется индексом, но без включения указанных выше флажков.
При создании формы придется дважды произвести загрузку полей на форму для главной и подчиненной таблиц с помощью окна "Data Form Wizard – Record Source" (рис. 6.9,г) и установить связь между таблицами с помощью окна "Data Form Wizard – Record Source Relation" (рис. 6.9,д). В остальном процесс создания сложной формы аналогичен описанным выше.
Используя окно ComboBox "Column to Sort By" (рис. 6.9,г), во всех случаях создания форм легко решить проблему сортировки записей для вывода на форму.
Выше упоминалось, что при создании форм с помощью мастера создается код программы, содержащий ошибку. В результате появляются проблемы с добавлением записи кнопкой "Add". Ниже приведен текст переработанной процедуры cmdAdd_Click(), снимающий эту проблему.
Private Sub cmdAdd_Click()
Data1.Recordset.AddNew : Data1.Caption = "Records: " & (Data1.Recordset.RecordCount)
Data1.Caption = Data1.Caption & " Next record: " & (Data1.Recordset.RecordCount + 1)
txtFields(0).Text = "" : txtFields(0).SetFocus
End Sub
Отчеты являются средством вывода информации на принтер или на экран монитора. Основным инструментом создания файлов отчетов являются приложения Crystal Report из комплекта Visual Basic 5.0 и редактор отчетов, входящий в комплект Visual Basic 6.0. Результатом работы приложения Crystal Report является файл типа *.rpt, который называется файлом отчета и содержит описание отчета. В результате работы редактора отчетов среды Visual Basic 6.0 создается ряд файлов, один из которых *.dsr содержит основные сведения об отчете.
Для вывода отчета, данные о котором хранятся в файле *.rpt в обеих версиях Visual Basic служит объект Crystal Report, который добавляется в проект командой "Разработать/Компоненты" ("Project/Components"). Отчет может выводиться в файл, на принтер и в окно отчета на экране монитора.
6.4.2.1. Классификация отчетов
Отчет достаточно гибкий инструмент для представления данных приложение Crystal Report позволяет создать несколько разновидностей отчетов, из которых важнейшими являются[16]:
· список (Listing),
· стандартный (Standard),
· сводный (Summary).
В отчете типа "список" записи представлены в виде непрерывного сортированного списка. Примером такого отчета может служить список группы, содержащий фамилии, имена, отчества и другие служебные данные.
В стандартном отчете записи разбиты на группы. Для каждого столбца с численными данными подведены итоговые суммы. Примером такого отчета может быть сводка объемов продаж товаров различными отделами магазина. Записи содержат названия отделов, названия товаров, цены, количества проданных товаров и суммы, полученные за все проданные единицы товара.
В сводке все записи разбиты на группы, соответствующие отделам. Внутри групп выделяются подгруппы, соответствующие наименованиям товаров. Для столбцов, отражающих количество проданных товаров и полученные суммы, подводятся итоги как внутри подгрупп и групп, так и для всего отчета в целом.
В сводном отчете записи разбиты на группы, для всех столбцов с численными данными подсчитаны итоговые суммы, но каждая группа отображается только одной строкой в отчете с показом итоговых сумм.
6.4.2.2. Создание отчетов в среде Crystal Report
Crystal Report инсталлируется как отдельное приложение в группе Visual Basic 5.0, но может быть и включен в состав среды командой "Разработать/Компоненты" (Project/Components), которая обеспечит доступ к вкладке "Designers" окна "Components". В процессе инсталляции приходится в обязательном порядке заполнять регистрационную форму (регистрацию можно и отложить) и карту настройки приложения (рис. 6.11). В карте настройки обязательно необходимо указать типы файлов баз данных (для разработки учебных систем управления базами данных целесообразно включить флажки "Access" и "Excel") и системы программирования, в которых разрабатываются системы управления базами данных (достаточно включить флажок "Visual Basic"). После настройки и регистрации (даже если она отложена) открывается окно приложения Crystal Report (рис. 6.12).
Рис. 6.11. Окно настройки приложения Crystal Report.
Рис. 6.12. Окно приложения Crystal Report после выбора команды "New"
Для создания отчета необходимо выбрать команду "File/New" и в открывшемся меню (рис. 6.12) указать тип отчета. Далее в четырех последовательно открывающихся окнах мастера отчетов следует указать следующие сведения:
· имя таблицы или запроса (рис. 6.13,а),
· для связанных таблиц – поля, выделенные для связи (рис. 6.13,б),
· имена полей, помещаемых в отчет (рис. 6.13,в).
Четвертый шаг является необязательным и в его окне можно не выполнять никаких действий, кроме закрытия окна мастера кнопкой "Preview Report".
а) | б) |
в) | |
Рис. 6.13. Окна мастера отчетов |
6.4.2.3. Создание отчетов в среде Visual Basic 6
с помощью встроенного редактора
Для создания отчета с помощью встроенного редактора необходимо включить в проект два дополнительных объекта Data Report и Data Environment, выполнить их настройку, а затем отредактировать отчет.
Указанные объекты подключаются к среде командой "Разработать/Компоненты" ("Project/Components"), открывающей окно "Компоненты", на котором необходимо включить соответствующие флажки на вкладке Designers. Далее объекты добавляются в проект командами "Разработать/Добавить Data Report" ("Project/Add Data Report") и "Разработать/Добавить Более ActivX проектировщики…". После добавления объекта Data Report в окне среды открывается окно объекта (рис. 6.14,а), а панель инструментов (Tool Box) приобретает вид рис. 6.14,б. При нажатии кнопки General панель Tool Box приобретает прежний вид.
а) | б) |
Рис. 6.14. Окно редактора отчетов (а) и панель Tool Box при активизации элемента Data Report (б) |
Объект Data Environment сообщает объекту Data Report сведения о базе данных и используемых таблицах, запросах и полях, т.е. играет по отношению к нему ту же роль, что и объект Data для объектов ComboBox, DBCombo, DBGrid и пр. Поэтому первым (хотя это и не принципиально) следует настроить объект Data Environment. Выбрав в папке Designers окна оглавления проекта объект Data Environment, программист получает доступ к окну объекта (рис. 6.15) и списку его свойств. Из рис. 6.15 видно, что объект получил имя envRpts. В составе объекта имеется один объект типа
Рис. 6.15. Окно объекта Data Environment | DE Connection, имеющий имя cnnWind (присвоено программистом). Число таких объектов может быть увеличено щелчком по кнопке "Add Connection". Щелчком по кнопке "Properties" (рис. 6.15, первая справа) можно открыть карту настройки с вкладками "Поставщик данных", "Подключение" и пр., на которых задается значение свойства "ConnectionSourse". Значение свойства состоит из нескольких сегментов, в том числе сегментов |
"Provider" и "DataSourse". Литературные источники в качестве провайдера базы данных рекомендуют выбрать пункт "Microsoft Jet 3.51 OLE DB Provider". На вкладке "Подключение" задается сегмент "DataSourse", содержащий спецификацию файла базы данных (т.е. имя диска, путь к файлу и его имя)[17]. Далее в объект Connection следует добавить объект Command[18], свойства для которого следует указать в окне "Свойства" (рис. 6.16).
Рис. 6.16. Окно свойств объекта Commands | В окне "Command Name" указано имя объекта Command, в окне "Connection" – имя объекта Connection. В рамке "Source of Data" переключатель "Database Object/SQL Statement" позволяет выбрать тип и имя средства отбора данных в отчет[19]. Стандартными средствами отбора являются таблица данных и запрос[20]. Альтернативой объекту базы данных является запрос |
на языке SQL (SQL Statement), который можно построить с помощью кнопки "SQL Builder". Наиболее простым вариантом является выбор объекта "Таблица" ("Table"). В окне объекта Data Environment (рис. 6.15) ниже имени объекта типа Connection показаны имена полей выбранной таблицы.
После настройки объекта Data Environment необходимо настроить объект Data Report. Для этого необходимо установить в качестве значения свойства Data Source имя объекта Data Environment, а в качестве значения свойства Data Member – имя объекта Command.
Редактирование отчета выполняется в два шага:
· на первом шаге следует открыть окно объекта Data Report и перетащить в секцию "Detail" поля таблицы из окна объекта Data Environment, в окне Data Report появляются объекты типов RptLabel (содержит имя поля) и RptTextBox (контейнер для данных).
· на втором шаге объекты типа RptLabel перетаскиваются в секцию "Page Headtr" (рис. 6.14,а), причем их содержимое можно изменить.
Далее можно, задав значения других свойств объекта Data Report и его компонентов, выполнить более тонкую настройку отчета (задать границы отчета на бумаге и в окне на экране монитора, параметры шрифта заголовков столбцов и т.д.). Кроме того, используя объекты RptLabel, RptTextBox и RptFunction, можно добавить в отчет заголовок и другие статические надписи, поле даты, суммирование данных в столбцах с численными данными и т.д. Во многом процедура редактирования отчета в среде Visual Basic 6.0 напоминает процедуру редактирования отчета в среде MS Access.
6.4.2.4. Вывод отчетов на экран и на принтер
Отчет может выводиться на принтер, в окно на экран монитора и в файл. Поэтому при печати в файл можно выбрать формат файла отчета, соответствующий формату документов приложений Word, Excel, Rich Text Format и др. (соответственно *.doc, *.xls, *.rtf и т.д.).
Для вывода отчета, созданного приложением Crystal Report, служит объект Crystal Report, входящий в комплект поставки Visual Basic как дополнительный стандартный объект. Поставщиком данных для этого объекта является объект типа Data. Поэтому на форме вместе с объектом Crystal Report должен быть и управляющий им объект Data. Возможно совместное использование объекта Data различными объектами, работающими с базами данных. Установив указанные объекты на форму, необходимо выполнить их настройку. Объект Data настраивается в обычном порядке (см. 6.1). Настройка объекта Crystal Report выполняется установкой значений следующих свойств:
· DataSource | – имя управляющего объекта типа Data, |
· ReportFileName | – имя файла, содержащего описание отчета (*.rpt), |
· Destination | – вывод в окно на экране, на принтер, в файл, |
· PrinterStartPage · PrinterStopPage · CopiesToPrinter · PrintFileName · PrintFileType | – номер первой печатаемой страницы отчета, – номер последней печатаемой страницы отчета, – число печатаемых копий, – имя файла для вывода отчета при печати отчета в файл, – формат файла, при печати отчета в файл, |
· WindowBorderStyle · WindowTitle · WidowTop · WindowLeft · WindowWidth · WindowHeght · WindowControlBox | – стиль оформления окна отчета на экране, – заголовок окна отчета, – расположение верхней границы окна на экране, – расположение верхней границы окна на экране, – ширина окна отчета, – высота окна отчета, – наличие панели управления окном отчета. |
Все свойства доступны как на стадии проектирования, так и во время выполнения программы.
Для подачи команды на вывод отчета необходимо поставить хотя бы кнопку CommandButton, а в ее обработчике событий Click() поставить команду
r = CrRpt1.PrintReport,
в которой переменная r имеет тип integer. Направление вывода определено свойством Destinations.
Если отчет создан в среде редактора отчетов, то для вывода отчета следует также установить кнопку CommandButton, а в ее обработчик Click() для вывода на принтер следует поставить команду
i = rptOrders.PrintReport(True),
в которой переменная i имеет тип long. Аргумент True вызывает окно объекта Common Dialog, в котором уточняются параметры печати. Для его отключения следует поставить аргумент (False). Вывод в файл отчета, созданного посредством объектов Data Report и Data Environment, выполняется методом ExportReport объекта Data Report, а вывод в окно на экране – методом Show.