4.5 Создание отчетов по базам данных с помощью приложений Office

Созданное приложение должно позволять создать отчеты по базе данных club.mdb, входящую в комплект стандартной поставки пакета Microsoft Office.

4.5.1 Создание отчета с помощью Microsoft Word. Откройте новое приложение в Delphi

Поместить на форму компонент TADOConection, два компонента TADODataSet и три компонента TButton ( рис.4.3). Свойствам Caption и Name присвоить значения из таблицы 1.

Таблица 4.1

Компонент Свойство Caption Свойство Name
Tbutton1 Отчет с использованием MS Word Report_Word
Tbutton2 Отчет с использованием MS Excel Report_Excel

Свойству ConnectionString объекта TADODataSet установить значение, которое связывало бы его с базой данных club.mdb .

Объявить глобальные переменные для объектов Application, Document, Range и Table:

Var Forml: TForm1;

// Range и Table

Wd, Doc, Rng, Tbl: Variant;

Свойствам CommandType и CommandText компонентов присвоить значения из таблицы 4.2.

Таблица 4.2

Компонент Свойство CommandType Свойство CommandText
TADODataSet1 cmdText Select КодКлиента, Название, Город From Страны

Реализовываем генерацию табличного отчета в обработчике события OnClick компонента Buttonl:

procedure TForm1.Report_WordClick(Sender: TObject);

var I, Rcnt:integer;

begin

 // Открываем базу данных и подсчитываем количество записей

 ADODataSet1.Open;

 Rcnt:=ADODataSet1.RecordCount;

 // Запускаем MS Word

 wd:= CreateOleObject('Word.Application');

 // Отображаем на экране окно MS Word

 wd.Visible :=True;

 // Создаем новый документ

 wd.Documents.Add;

 Doc:= wd.Documents.Item(1);

 // Добавляем новый абзац

Doc.Paragraphs.Add;

// Меняем его стиль

Doc.Paragraphs.Item(1).Style:='Заголовок 1';

// Создаем заголовок отчета

Rng := Doc.Range(0);

Rng.InsertBefore('Центр данных');

// Создаем заголовки колонок

Doc.Paragraphs.Add;

Rng.InsertAfter('Комп: Игрок: Дата: Продолжительность: Код услуги: Админ');

// Перемещаемся на первую запись набора данных

ADODataSet1.First;

for I := 1 to Rcnt do begin

 // Добавляем новый абзац

 Doc.Paragraphs.Add;

 // Добавляем поля из текущей записи в новый абзац

 Rng.InsertAfter(ADODataSet1.Fields[0].AsString+':'+

 ADODataSet1.Fields[1].ASString+':'+

 ADODataSet1.Fields[2].AsString+':'+

 ADODataSet1.Fields[3].ASString+':'+

 ADODataSet1.Fields[4].ASString+':'+

 ADODataSet1.Fields[5].ASString);

 ADODataSet1.Next;

end;

// Превращаем текст в таблицу

Rng:=Doc.Range(Doc.Paragraphs.Item(3).Range.Start, Doc.Paragraphs.Item(Rcnt+3).Range.End);

Tbl:=Rng.ConvertToTable(':',Rcnt,6);

// Изменяем размеры колонок таблицы

 Tbl.Columns.Item(1).Width:=Tbl.Columns.Item(1).Width-30;

 Tbl.Columns.Item(2).Width:=Tbl.Columns.Item(2).Width+20;

 Tbl.Columns.Item(3).Width:=Tbl.Columns.Item(3).Width-3;

 Tbl.Columns.Item(4).Width:=Tbl.Columns.Item(4).Width+20;

 Tbl.Columns.Item(5).Width:=Tbl.Columns.Item(5).Width-5;

 Tbl.Columns.Item(6).Width:=Tbl.Columns.Item(6).Width+5;

 // Подавляем вывод диагностических сообщений

Wd.DisplayAlerts:=False;

// Сохраняем документ

Doc.SaveAs(D:\SOT\Custrep.doc');

// Закрываем Word и освобождаем ресурсы

//Wd.Quit;

Wd:=Unassigned;

end;

Откомпилируйте приложение и проверьте работу кнопки «Отчет с использованием MS Word». При выполнении этого приложения создается документ с отчетом по базе данный club.mdb (рис.4.4).

Пояснения к приведенному выше фрагменту кода.

Во-первых, мы должны создать копию Microsoft Word, сделать ее видимой и создать новый документ.

wd:= CreateOleObject('Word.Application');

 // Отображаем на экране окно MS Word

 wd.Visible :=True;

 // Создаем новый документ

 wd.Documents.Add;

Затем нужно создать заголовок отчета и заголовки колонок будущей таблицы, добавляя соответствующие абзацы и меняя их стили:

// Добавляем новый абзац

Doc.Paragraphs.Add;

// Меняем его стиль

Doc.Paragraphs.Item(1).Style:='Заголовок 1';

// Создаем заголовок отчета

Rng := Doc.Range(0);

Rng.lnsertBefore(Центр данных');

// Создаем заголовки колонок

Doc.Paragraphs.Add;

Rng.InsertAfter('Комп: Игрок: Дата: Продолжительность: Код услуги: Админ');

Затем следует, перемещаясь по записям набора данных, добавить в документ строки, соответствующие этим записям:

// Перемещаемся на первую запись набора данных

ADODataSet1.First;

for I := 1 to Rcnt do begin

 // Добавляем новый абзац

 Doc.Paragraphs.Add;

 // Добавляем поля из текущей записи в новый абзац

 Rng.InsertAter(ADODataSet1.Fields[0].AsString+':'+

ADODataSet1.Fields[1].ASString+':'+

 ADODataSet1.Fields[2].AsString+':'+

 ADODataSet1.Fields[3].ASString+':'+

 ADODataSet1.Fields[4].ASString+':'+

 ADODataSet1.Fields[5].ASString);

 ADODataSet1.Next;

end;

Далее мы превращаем набор строк в таблицу Word и изменяем ширину ее колонок так, чтобы корректно отобразить содержащиеся в ней данные:

// Превращаем текс в таблицу

Rng:=Doc.Range(Doc.Paragraphs.Item(3).Range.Start, Doc.Paragraphs.Item(rcnt+3).Range.End); Tbl:=Rng.ConvertToTable(':',rcnt.3);

// Изменяем размеры колонок таблицы

 Tbl.Columns.Item(1).Width:=Tbl.Columns.Item(1).Width-30;

 Tbl.Columns.Item(2).Width:=Tbl.Columns.Item(2).Width+20;

 Tbl.Columns.Item(3).Width:=Tbl.Columns.Item(3).Width-3;

 Tbl.Columns.Item(4).Width:=Tbl.Columns.Item(4).Width+20;

 Tbl.Columns.Item(5).Width:=Tbl.Columns.Item(5).Width-5;

 Tbl.Columns.Item(6).Width:=Tbl.Columns.Item(6).Width+5;Теперь нам нужно сохранить документ, подавив при этом вывод диагностических сообщений Word:

// Подавляем вывод диагностических сообщений

Wd.DisplayAlerts:=False;

Почему нужно избавиться от вывода диагностических сообщений? В общем случае приложения, подобные Word, можно запускать удаленно, например, с помощью средств DCOM или универсальных СОМ-клиентов, доступ к которым осуществляется по протоколам TCP/IP или HTTP/HTTPS. В этом случае у пользователя не будет возможности отвечать на вопросы диалоговых окон Word — ведь физически он находитсяна другом компьютере; кроме того, некоторые режимы применения DCOM таковы, что пользовательский интерфейс DCOM-сервера (включая обработку им событий мыши и клавиатуры) может быть просто недоступен никому из пользователей. В этом случае диалоговое окно, созданное в оперативной памяти, получит сообщения о событии, связанном со щелчком на одной из кнопок этого окна, и не будет закрыто, и у пользователя создастся впечатление, что приложение «зависло».

И, наконец, нам следует сохранить документ и освободить ресурсы:

// Сохраняем документ

Doc.SaveAs('D:\SOT\Custrep.doc');

// Закрываем Word и освобождаем ресурсы

Wd.Quit;

 Wd:=Unassigned;


Информация о работе «Информационная система компьютерного клуба»
Раздел: Информатика, программирование
Количество знаков с пробелами: 46703
Количество таблиц: 3
Количество изображений: 0

Похожие работы

Скачать
19988
5
1

... рынке — делать все, чтобы клиенты всегда уходили в хорошем настроении и всегда возвращались снова. По статистике примерно 60 тысяч человек в Иркутске пользуются услугами компьютерных клубов. Так как основными представителями таких клубов являются «Arsenal» и «XXI век », и примерно 5 % клиентов предпочитают пользоваться другими клубами, 20 % выбирают «XXI век», то на «Arsenal» приходится около 75 ...

Скачать
16416
12
0

... по телефонной линии, пользователя интересует более высокая скорость подключения. Все это может обеспечить на современном этапе развития компьютерный клуб. 1. Характеристика бизнеса и объекта Разработка и осуществление инвестиционного проекта "Компьютерный клуб "ТАЙМ-АУТ"" вызваны необходимостью предоставления компьютерных услуг населению. Сфера услуг - одна из самых быстроразвивающихся ...

Скачать
146463
19
10

... с положительностью сальдо поступлений и расходов и малым сроком окупаемости. 6. Обеспечение безопасности жизнедеятельности в системе ДО В данном дипломном проекте разработана автоматизированная информационная система дистанционного обучения по дисциплине “Финансы и кредит”. Ее использование тесно связано с применением ПЭВМ, поэтому организация рабочего места пользователя системы должна ...

Скачать
155675
15
0

... охватывало бы вопросы воспитания, взаимодействия учителей с родителями учеников и самими учениками, вопросы самоподготовки желающих учиться учеников, помощи отстающим и т.п. 5. РАЗРАБОТКА ШКОЛЬНОЙ ИНФОРМАЦИОННОЙ СИСТЕМЫ (ШИС) НА ОСНОВЕ IT-ТЕХНОЛОГИЙ ДЛЯ МОУ СОШ № 97 Поставленные в предыдущем разделе задачи могут быть решены путем организации широчайшего (относительно родителей, учеников и ...

0 комментариев


Наверх