Spec-Zone .ru
спецификации, руководства, описания, API
|
Crystal Reports является общим инструментом, используемым разработчиками Приложения Windows, чтобы выполнить генерация документа и создание отчетов. В этом разделе мы покажем, как использовать Crystal Reports XI с MySQL и Соединителем/Сетью.
Создавая отчет в Crystal Reports есть две опции для того, чтобы получить доступ к данным MySQL, разрабатывая Ваш отчет.
Первая опция должна использовать Соединитель/ODBC в качестве источника данных ADO, разрабатывая Ваш отчет. Вы будете в состоянии просмотреть свою базу данных и выбрать, табличное и полевое использование перетаскивают и отбрасывают, чтобы создать Ваш отчет. Недостаток этого подхода - то, что дополнительная работа должна быть выполнена в пределах Вашего приложения, чтобы произвести набор данных, который соответствует тот, ожидаемый Вашим отчетом.
Вторая опция должна создать набор данных в VB.NET и сохранить его как XML. Этот XML-файл может тогда использоваться, чтобы разработать отчет. Это работает вполне хорошо, выводя на экран отчет в Вашем приложении, но менее универсально во время проектирования, потому что следует выбрать все соответствующие столбцы, создавая набор данных. Если Вы забываете столбец, следует воссоздать набор данных прежде, чем столбец сможет быть добавлен к отчету.
Следующий код может использоваться, чтобы создать набор данных из запроса и записать это в диск:
Dim myData As New DataSetDim conn As New MySqlConnectionDim cmd As New MySqlCommandDim myAdapter As New MySqlDataAdapterconn.ConnectionString = "server=127.0.0.1;" _ & "uid=root;" _ & "pwd=12345;" _ & "database=world"Try conn.Open() cmd.CommandText = "SELECT city.name AS cityName, city.population AS CityPopulation, " _ & "country.name, country.population, country.continent " _ & "FROM country, city ORDER BY country.continent, country.name" cmd.Connection = conn myAdapter.SelectCommand = cmd myAdapter.Fill(myData) myData.WriteXml("C:\dataset.xml", XmlWriteMode.WriteSchema)Catch ex As Exception MessageBox.Show(ex.Message, "Report could not be created", MessageBoxButtons.OK, MessageBoxIcon.Error)End Try
DataSet myData = new DataSet();MySql.Data.MySqlClient.MySqlConnection conn;MySql.Data.MySqlClient.MySqlCommand cmd;MySql.Data.MySqlClient.MySqlDataAdapter myAdapter;conn = new MySql.Data.MySqlClient.MySqlConnection();cmd = new MySql.Data.MySqlClient.MySqlCommand();myAdapter = new MySql.Data.MySqlClient.MySqlDataAdapter();conn.ConnectionString = "server=127.0.0.1;uid=root;" + "pwd=12345;database=test;";try{ cmd.CommandText = "SELECT city.name AS cityName, city.population AS CityPopulation, " + "country.name, country.population, country.continent " + "FROM country, city ORDER BY country.continent, country.name"; cmd.Connection = conn; myAdapter.SelectCommand = cmd; myAdapter.Fill(myData); myData.WriteXml(@"C:\dataset.xml", XmlWriteMode.WriteSchema);}catch (MySql.Data.MySqlClient.MySqlException ex){ MessageBox.Show(ex.Message, "Report could not be created", MessageBoxButtons.OK, MessageBoxIcon.Error);}
Получающийся XML-файл может использоваться в качестве ADO.NET источник данных XML, разрабатывая Ваш отчет.
Если Вы хотите разрабатывать свои отчеты, используя Соединитель/ODBC, он может быть загружен с
В большинстве целей мастер Стандартного отчета помогает с начальным созданием отчета. Чтобы запустить мастер, откройте Crystal Reports и выбрать Новое> опция Standard Report из меню File.
Мастер сначала запрашивает Вас источник данных. Если Вы используете Соединитель/ODBC в качестве своего источника данных, используйте провайдера OLEDB для опции ODBC от OLE DB (ADO) дерево вместо ODBC (RDO) дерево, выбирая источник данных. Используя сохраненный набор данных, выберите ADO.NET (XML) опция и обзор к Вашему сохраненному набору данных.
Остаток от процесса создания отчета делается автоматически мастером.
После того, как отчет создается, выберите Опции Отчета... запись меню File. Непроверьте опцию Save Data With Report. Это препятствует тому, чтобы сохраненные данные вмешались в загрузку данных в пределах нашего приложения.
Чтобы вывести на экран отчет, мы сначала заполняем набор данных с данными, необходимыми для отчета, затем загружаем отчет и связываем это с набором данных. Наконец мы передаем отчет к управлению crViewer для дисплея пользователю.
Следующие ссылки необходимы в проекте, который выводит на экран отчет:
CrystalDecisions. CrystalReports. Механизм
CrystalDecisions. ReportSource
CrystalDecisions. Совместно используемый
CrystalDecisions. Windows. Формы
Следующий код предполагает, что Вы создали свой отчет, используя сохраненное использование набора данных
кода, показанного в Разделе 21.2.5.17.1, "Создавая
Источник данных", и имейте crViewer контроль на своей названной форме myViewer
.
Imports CrystalDecisions.CrystalReports.EngineImports System.DataImports MySql.Data.MySqlClientDim myReport As New ReportDocumentDim myData As New DataSetDim conn As New MySqlConnectionDim cmd As New MySqlCommandDim myAdapter As New MySqlDataAdapterconn.ConnectionString = _ "server=127.0.0.1;" _ & "uid=root;" _ & "pwd=12345;" _ & "database=test"Try conn.Open() cmd.CommandText = "SELECT city.name AS cityName, city.population AS CityPopulation, " _ & "country.name, country.population, country.continent " _ & "FROM country, city ORDER BY country.continent, country.name" cmd.Connection = conn myAdapter.SelectCommand = cmd myAdapter.Fill(myData) myReport.Load(".\world_report.rpt") myReport.SetDataSource(myData) myViewer.ReportSource = myReportCatch ex As Exception MessageBox.Show(ex.Message, "Report could not be created", MessageBoxButtons.OK, MessageBoxIcon.Error)End Try
using CrystalDecisions.CrystalReports.Engine;using System.Data;using MySql.Data.MySqlClient;ReportDocument myReport = new ReportDocument();DataSet myData = new DataSet();MySql.Data.MySqlClient.MySqlConnection conn;MySql.Data.MySqlClient.MySqlCommand cmd;MySql.Data.MySqlClient.MySqlDataAdapter myAdapter;conn = new MySql.Data.MySqlClient.MySqlConnection();cmd = new MySql.Data.MySqlClient.MySqlCommand();myAdapter = new MySql.Data.MySqlClient.MySqlDataAdapter();conn.ConnectionString = "server=127.0.0.1;uid=root;" + "pwd=12345;database=test;";try{ cmd.CommandText = "SELECT city.name AS cityName, city.population AS CityPopulation, " + "country.name, country.population, country.continent " + "FROM country, city ORDER BY country.continent, country.name"; cmd.Connection = conn; myAdapter.SelectCommand = cmd; myAdapter.Fill(myData); myReport.Load(@".\world_report.rpt"); myReport.SetDataSource(myData); myViewer.ReportSource = myReport;}catch (MySql.Data.MySqlClient.MySqlException ex){ MessageBox.Show(ex.Message, "Report could not be created", MessageBoxButtons.OK, MessageBoxIcon.Error);}
Новый набор данных это генерировало использование того же самого запроса, используемого, чтобы генерировать ранее сохраненный набор данных. Как только набор данных заполнен, ReportDocument используется, чтобы загрузить файл отчета и связать его с набором данных. ReportDocument является переданным как ReportSource crViewer.
Этот тот же самый подход проявляется, когда отчет создается из единственной таблицы, используя Соединитель/ODBC. Набор данных заменяет таблицу, используемую в отчете, и отчет выводится на экран должным образом.
Когда отчет создается из многократных таблиц, используя Соединитель/ODBC, набор данных с многократными таблицами должен быть создан в нашем приложении. Это позволяет каждой таблице в источнике данных отчета быть замененной отчетом в наборе данных.
Мы заполняем набор данных с многократными таблицами, обеспечивая многократный SELECT
операторы в нашем объекте MySqlCommand. Они SELECT
операторы основаны на SQL-запросе, показанном в Crystal Reports в
опции Show SQL Query меню Database. Примите следующий запрос:
SELECT `country`.`Name`, `country`.`Continent`, `country`.`Population`, `city`.`Name`, `city`.`Population`FROM `world`.`country` `country` LEFT OUTER JOIN `world`.`city` `city` ON `country`.`Code`=`city`.`CountryCode`ORDER BY `country`.`Continent`, `country`.`Name`, `city`.`Name`
Этот запрос преобразовывается в два SELECT
запросы и выведенный на экран со следующим кодом:
Imports CrystalDecisions.CrystalReports.EngineImports System.DataImports MySql.Data.MySqlClientDim myReport As New ReportDocumentDim myData As New DataSetDim conn As New MySqlConnectionDim cmd As New MySqlCommandDim myAdapter As New MySqlDataAdapterconn.ConnectionString = "server=127.0.0.1;" _ & "uid=root;" _ & "pwd=12345;" _ & "database=world"Try conn.Open() cmd.CommandText = "SELECT name, population, countrycode FROM city ORDER BY countrycode, name; " _ & "SELECT name, population, code, continent FROM country ORDER BY continent, name" cmd.Connection = conn myAdapter.SelectCommand = cmd myAdapter.Fill(myData) myReport.Load(".\world_report.rpt") myReport.Database.Tables(0).SetDataSource(myData.Tables(0)) myReport.Database.Tables(1).SetDataSource(myData.Tables(1)) myViewer.ReportSource = myReportCatch ex As Exception MessageBox.Show(ex.Message, "Report could not be created", MessageBoxButtons.OK, MessageBoxIcon.Error)End Try
using CrystalDecisions.CrystalReports.Engine;using System.Data;using MySql.Data.MySqlClient;ReportDocument myReport = new ReportDocument();DataSet myData = new DataSet();MySql.Data.MySqlClient.MySqlConnection conn;MySql.Data.MySqlClient.MySqlCommand cmd;MySql.Data.MySqlClient.MySqlDataAdapter myAdapter;conn = new MySql.Data.MySqlClient.MySqlConnection();cmd = new MySql.Data.MySqlClient.MySqlCommand();myAdapter = new MySql.Data.MySqlClient.MySqlDataAdapter();conn.ConnectionString = "server=127.0.0.1;uid=root;" + "pwd=12345;database=test;";try{ cmd.CommandText = "SELECT name, population, countrycode FROM city ORDER " + "BY countrycode, name; SELECT
name, population, code, continent FROM " + "country ORDER BY continent, name"; cmd.Connection = conn; myAdapter.SelectCommand = cmd; myAdapter.Fill(myData); myReport.Load(@".\world_report.rpt"); myReport.Database.Tables(0).SetDataSource(myData.Tables(0)); myReport.Database.Tables(1).SetDataSource(myData.Tables(1)); myViewer.ReportSource = myReport;}catch (MySql.Data.MySqlClient.MySqlException ex){ MessageBox.Show(ex.Message, "Report could not be created", MessageBoxButtons.OK, MessageBoxIcon.Error);}
Важно упорядочить SELECT
запросы в алфавитном порядке, поскольку это - порядок отчет, будут
ожидать, что его исходные таблицы будут в. Один оператор SetDataSource необходим для каждой таблицы в
отчете.
Этот подход может вызвать проблемы производительности, потому что Crystal Reports должен связать таблицы на стороне клиента, которая будет медленнее чем использование предварительно сохраненного набора данных.