

| стрелялки |
| спорт |
| драки |
| стратегии |
| гонки |
| логические |
| азартные |
| аркады |
| эротические |
| фильмы онлайн |
| Пример универсального генератора отчетов |
|
Наступила пора проверить свои знания на практике. Предлагаю создать полезную утилиту - программу, позволяющую экспортировать в документ Word данные из таблиц формата Paradox и dBase. Для этого нам понадобится три компонента: обычная кнопка TButton, таблица TTable и диалог открытия файла TOpenDialog. Разместите их на главной форме нового проекта. Теперь подключим к проекту модуль ComObj, в котором объявлена бесценная функция CreateOleObject(), инициирующая объект автоматизации. uses ComObj; Затем настроим диалог открытия файлов. Для этого в момент создания формы определим фильтр, пропускающий файлы только с расширениями *.db (таблицы Paradox) и *.dbf (таблицы dBase). Кроме того, внесем некоторые изменения в опции диалога. procedure TForm1.FormCreate(Sender: TObject); begin OpenDialog1.Filter:='Таблицы Paradox и dBase|*.db;*.dbf'; OpenDialog1.Options:=OpenDialog1.Options+[ofReadOnly]-[ofAllowMultiSelect]; end; Переходим к ядру нашей программы - процедуре генератора отчетов. Для этого в секции частных объявлений проекта опишите заголовок метода: procedure CreateWordReport; Реализация метода выглядит так: procedure TForm1.CreateWordReport; var Word, Doc, Range, Paragraph, Table : OleVariant; aRow, aCol : integer; begin Word:=CreateOleObject('Word.Application'); //вызываем сервер автоматизации Word try Doc:=Word.Documents.Add; {новый документ} Doc.PageSetup.PaperSize:=7; {формат A4} Doc.PageSetup.Orientation:=1; {альбомная ориентация} Range:=Doc.Range; Range.InsertBefore('Таблица '+Table1.TableName); {первая строка на странице} Pa rag raph:=Doc.Paragraphs.Add; {добавим пару пустых абзацев} Paragraph:=Doc.Paragraphs.Add; {вставляем в документ пустую таблицу, количество строк и столбцов определяется числом записей RecordCount и полей FieldCount в файле базы данных} Table:=Doc.Tables.Add(Paragraph.Range, Table1.RecordCount+1, Table1.FieldCount); {формируем заголовок таблицы из названий полей} for aCol:=1 to Table1.FieldCount do Table.Cell(1,aCol).Range.InsertAfter(Table1.Fields[aCol-1].DisplayName); aRow:=2; //переводим счетчик строк на 2-ю строку while Table1.Eof<>true do {перебираем строки файла и заполняем таблицу данными} begin for aCol:=1 to Table1.FieldCount do {перебор колонок} begin if Table1.Fields[aCol-1].IsBlob=False then {не пропускаем BLOB-поля} Table.Cell(aRow,aCol).Range.InsertAfter(Table1.Fields[aCol-1].AsString) else Table.Cell(aRow,aCol).Range.InsertAfter('BLOB'); end; Inc(aRow); //приращение счетчика строк Table1.Next; //переход к следующей строке end; Table.AllowAutoFit:=True; {форматируем таблицу} Table.AutoFormat(9); finally Word.Visible:=true; Word := Unassigned; Table1.Close; end; end; После столь титанических трудов немного передохнем и сделаем последний шаг - научим программу передавать в процедуру CreateReport() имя файла таблицы: procedure TForm1.Button1Click(Sender: TObject); begin if OpenDialog1.Execute then begin with Table1 do {открываем файл таблицы базы данных} begin Close; DatabaseName:=ExtractFilePath(OpenDialog1.FileName); TableName:=ExtractFileName(OpenDialog1.FileName); Open; end; CreateWordReport; end; end; //извлекаем путь //к файлу таблицы //узнаем имя файла таблицы //открываем набор данных //генерация отчета Вот и все! На мой взгляд, у нас получилась весьма элегантная и главное -полезная программка. |
