Страница свойств позволяет установить параметры только в design time. Если свойствами контрола надо управлять динамически, надо писать код. Давайте посмотрим основные шаги, необходимые для вывода отчета.
1. Указываем имя отчета
CrystalReport1.ReportFileName = App.Path + "\rptcm.rpt"
В свойстве ReportFileName указывается полный путь выбранного файла отчета.
2. Указываем таблицы, используемые в отчете. Crystal Reports хранит имена таблиц в виде массива. При использовании таблиц dbf каждая таблица – это отдельный файл.
CrystalReport1.DataFiles(0)=C:\work\seles1.dbf CrystalReport1.DataFiles(1)=C:\work\seles2.dbf
В базах данных Access и базах данных SQL таблицы не ассоциированы с файлами. Поэтому, например для базы данных Access необходимо для всех таблиц установить один и тот же файл:
CrystalReport1.DataFiles(0)=C:\work\paper.mdb CrystalReport1.DataFiles(1)=C:\work\paper.mdb
Если таблицы размещены в нескольких mdb – файлах, важно соблюдать порядок таблиц в массиве. Если Crystal Reports не обнаружит в указанном файле требуемой таблицы, будет сгенерирована ошибка. База данных Access может быть закрыта паролем. В этом случае при выводе отчета появится окно-приглашение на его ввод. Пароль можно ввести и непосредственно в коде:
CrystalReport1.Password=”Fr442Gub”
При использовании баз данных SQL порядок подключения несколько другой:
- подключаемся к БД
CrystalReport1.Connect=[строка подключения]
- передаем базе данных запрос
CrystalReport1.SQLQuery=[строка SQL]
Если запрос базируется на хранимой процедуре, и ей требуется передать параметр, это делается так:
CrystalReport1.StoredProcParam(индекс_параметра)=”значение”
Значения всегда передаются в хранимую процедуру в виде строки, даже если для параметра ожидается другой тип. Заботу о приведении типа параметра берет на себя процессор Crystal Reports.
Crystal Reports поддерживает только хранимые процедуры выборки (основанные на ключевом слове SELECT), инструменты для работы с процедурами действия отсутствуют.
Кроме непосредственного подключения к БД Crystal Report Control в качестве источника данных может использовать связанные с данными контролы Data и ADOData.
CrystalReport1.DataSourse=Data1
3. Если в отчете имеются параметрические поля, передаем им значения параметров
Параметрические поля также хранятся в виде массива с нумерацией элементов от нуля. Crystal Report Control позволяет передавать в параметрические поля только одно значение. Множественный выбор и диапазоны значений здесь не поддерживаются
CrystalReport1.ParameterField(индекс)=Имя параметра;Новое значение;Установить текущее значение
Установка свойства осуществляется тремя операторами, разделенными точкой с запятой. Интерес представляет оператор Установить текущее значение . Он может принимать значение TRUE или FALSE. Если он установлен в TRUE, будет использоваться новое значение параметра, если FALSE – значение по умолчанию (зачем тогда вообще нужен параметр).
Если какой-то параметр не указан, будет выведено стандартное приглашение к его вводу.
4. Обновляем данные в отчете
CrystalReport1.RetrieveDataFiles
Эта команда заставляет Crystal Report прочитать данные и заново сформировать отчет (пока только в памяти компьютера)
5. Указываем, куда следует вывести готовый отчет
CrystalReport1.Destination = crptToWindow
Эта команда выводит отчет в окно предварительного просмотра.
Возможные значения направления вывода:
- crptExchange - crptMapi - crptToFile - crptToPrinter - crptToWindow
Смысл направлений вывода ясен из их названия. Дальнейшие наши действия зависят от выбранного направления вывода отчета.
Заканчивается вывод отчета (независимо от направления) одной из команд
CrystalReport1.Action = 1
либо
ret=CrystalReport1.PrintReport
здесь ret – переменная числового типа
Метод PrintReport в случае неудачи возвращает код ошибки (20ХХХ), или 0 в случае успеха. Установка значения 1 для свойства Action также приводит к немедленному выводу отчета. Здесь, однако, отсутствует возможность перехвата ошибок.