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

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

Для обращения к таблицам баз данных нам необходимо поместить на форму компонент Table типа ТТаblе. Значения её свойств DatabaseName, TableName и Active должны изменяться в программе в зависимости от выбора пользователя. На форму необходимо поместить компонент DataSource типа TDataSource и связать его с компонентом Table. Далее на форму необходимо поместить также компоненты типов TDBGrid и TDBNavigator. Значение их свойств DataSource необходимо установить равным ранее размещенному компоненту DataSource.

Для того чтобы пользователь в программе мог выбирать имена баз данных и таблиц, соответственно необходимо разместить два комбосписка. Список элементов первого комбосписка для выбора имени базы данных необходимо заполнить в обработчике события формы OnCreate. Для этого необходимо вызвать метод Session.GetDatabaseNames. Список элементов второго комбосписка для выбора имени таблицы необходимо формировать в ответ на изменение имени базы данных с помощью вызова метода Session.GetTableNames. При изменении имени базы данных или таблицы необходимо заново попытаться открыть таблицу или выдать сообщение об ошибке открытия.

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

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

Для программирования с использованием автоматизации вначале необходимо установить связь с программой-сервером автоматизации и связаться с каким-то из его объектов, например с книгой Microsoft Excel или с документом Microsoft Word. В Delphi это делается с помощью функции GetActiveOleObject для подключения к объекту уже запущенного сервера либо с помощью CreateOleObject для запуска приложения-сервера автоматизации и подключения к его объектам, Эти функции определены в модуле ComObj, поэтому перед их использованием этот модуль необходимо указать в секции uses. Аргументом вызова этих функций является имя создаваемого объекта сервера автоматизации, например «Excel.Application» для получения доступа к Microsoft Excel в целом либо «Word.Document» для создания в памяти временного текстового документа Microsoft Word.

Если при подключении к серверу произошла ошибка, например приложение-сервер не запущено в случае вызова функции GetActiveOleObject либо приложение-сервер вообще не установлено на компьютере, то возникает исключение, которое необходимо в программе соответствующим образом обработать.

Результатом вызова указанных функций соединения с сервером является специальный т.н. «диспетчеризуемый» интерфейс запрошенного объекта. Такие интерфейсы-диспетчеры позволяют вызвать процедуры, функции, обращаться к массивам и свойствам объектов сервера. В Delphi для упрощения доступа к объектам автоматизации такие интерфейсы лучше всего запоминать в переменных типа Variant, который позволяет хранить в себе данные разнообразных типов, в т.ч. и диспетчеризуемые интерфейсы объектов автоматизации.

В нашей программе результат вызова функции обращения к объекту «Excel.Application» необходимо запомнить, например, в переменной Excel, объявленной как имеющей тип Variant. Детальное описание всех имеющихся методов и свойств серверов автоматизации обычно имеется в соответствующих файлах справки.

Отключение от программы-сервера автоматизации производится в Delphi автоматически в тот момент, когда в переменных вариантного типа не останется интерфейсов к объектам сервера. Например, если все вариантные переменные объявлены внутри процедуры, то пои выходе из процедуры эти переменные автоматически обнулятся, и соединение с сервером автоматически разорвется. Другой вариант заключается в принудительном присвоении вариантной переменной любого другого значения, например специального значения UnAssigned.

После подключения к Microsoft Excel в нашей программе необходимо создать новую пустую книгу с помощью вызова Excel.WorkBocks.Add. В данном случае выражение Excel.WorkBooks позволяет обратиться к списку всех открытых книг Excel, а его функция Add создает новую пустую книгу и возвращает её диспетчеризуемый интерфейс. Результат этого вызова запомним в переменной WorkBook также типа Variant. Рабочие книги Excel состоят из листов; новая книга обычно содержит 3 листа. В нашем случае мы будем передавать содержимое таблицы базы данных на первый лист. Для этого необходимо обратиться к массиву листов созданной книги и запомнить первый лист в переменной Sheet с помощью вызова WorkBook.Sheets[1].

Обратите внимание, что при компиляции программы Delphi не может обеспечить проверку правильности обращения к объектам автоматизации. Это возможно сделать только на этапе непосредственно обращения к этим объектам. Поэтому обращение к объектам автоматизации через переменные типа Variant выполняется по сути в режиме интерпретации, т.е. работает относительно медленно.

Для обращения к ячейкам листа Excel необходимо использовать двумерный массив-свойство объекта-листа с помощью выражения Sheet.Cells[Row,Col], где Row и Col задают соответственно номера столбца и строки внутри листа (нумерация ведется начиная с 1).

Далее необходимо все поля всех записей ранее выбранной таблицы базы данных скопировать в лист Excel.

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

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

На рис. 36 приведен внешний вид запущенного приложения после того, как окно было несколько растянуто. На рис. 37 приведен внешний вид сгенерированного с помощью Microsoft Excel отчета по таблице базы данных. В листинге 20 приведен текст файла модуля.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: