2012-05-03 2 views
-1

Я пытаюсь передать все данные из БД в отчет: но я получаю сообщение об ошибке (Отчет не имеет таблиц)CrystalReports VB.NET DataTable Ошибка

Dim sqlConn As String = "SELECT (SUM(item_selldetail * item_quantity)/ 100 * 12) AS isv_report," & _ 
        " (SUM(item_selldetail * item_quantity) - (SUM(item_selldetail * item_quantity)/ 100 * 12)) " & _ 
        " AS capital_report,SUM(item_selldetail * item_quantity) AS total_report FROM qa_items;" 
       Dim objDataAdapter As New MySqlDataAdapter(sqlConn, objConn) 

       ' DataSet 
       Dim ds As New DataSet 

       ' llenar el DataSet 
       objDataAdapter.Fill(ds) 


       Dim mireporte As New ReportDocument() 

       mireporte.Load("C:\Users\Jonathan\Desktop\Proyectos\Quickadmon\Quickadmon\Reportes\report_capital_rpt.rpt") 

       mireporte.SetDataSource(ds) 

       Me.capitalreport_viewer_capital_report.ReportSource = mireporte 

Кто-нибудь есть какие-либо идеи, что я могу делать?

+0

Более подробная информация, образец вывода, что такое ошибка. Кстати ваше имя переменной 'sqlConn' очень вводит в заблуждение. Для меня sqlConn означает соединение sql, когда на самом деле sqlConn в вашем случае представляет собой строку sql, которая может быть вызовом SQLCommand. – JonH

+0

Когда я это сделал, я создал XML-файл в сочетании с объектом DataTable/DataReader и указал подключение ADO.NET к нему в Crystal (он позволит вам выложить поля в отчете). Затем из вашей программы .Net вы можете передать этот DataTable. Мне кажется, что вы возвращаете один набор записей в этом DataSet. Дайте мне несколько, и я напишу более подробный ответ. –

+0

Спасибо за комментирование, мне нужно сделать это программно, без использования мастера, занял базовый пример того, как выбрать некоторые поля из таблицы и отобразить их в средстве просмотра отчетов. Я несколько запутался в программном отношении. То, что я также избегаю, - это использовать абсолютные пути к файлам xml или rpt. –

ответ

1

Пример кода здесь, попробуйте dolike этот

sql = "SELECT Product_id,Product_name,Product_price FROM Product" 
    Dim dscmd As New SqlDataAdapter(sql, cnn) 
    Dim ds As New DataSet1 
    dscmd.Fill(ds, "Product") 
    cnn.Close() 

    Dim objRpt As New CrystalReport1 
    objRpt.SetDataSource(ds.Tables(1)) 
    CrystalReportViewer1.ReportSource = objRpt 
    CrystalReportViewer1.Refresh() 

Если вам нужен полный исходный код:

http://vb.net-informations.com/crystal-report/crystal_report_from_sql_query_string.htm

Мерке.

+0

Эй, ваш код, мне очень помог !, Спасибо + REP –

1

Вот что я сделал в прошлом.

1.) Создайте соединение ADO.NET (XML) в Crystal. Для этого вам необходимо указать путь к XML-файлу, файл XML будет содержать схему DataTable (или DataReader). Это будет выглядеть примерно так это (x0020 представляет собой пространство, в поле, если у вас есть, увидеть http://www.blakepell.com/Blog/?p=14 для более подробной информации о том, что):

<?xml version="1.0" encoding="utf-8" ?> 
    <people> 
     <first_x0020_name> 
     <last_x0020_name> 
     <phone> 
    </people> 

2.) Установите источник данных, как вы делали, в мой код обертки я имел что-то вроде этого, где я устанавливал его от свойств на обертке:

If _dataReader IsNot Nothing Then 
     report.SetDataSource(_dataReader) 
    End If 

    If _dataTable IsNot Nothing Then 
     report.SetDataSource(_dataTable) 
    End If 

3.) Положите его в управление телезрителя (или экспортировать его, который, как правило, то, что я делаю, так как я генерации выход PDF из него).

report.Export() 

Если это не работает для вас, а затем разместить конкретный трассировки стека и исключения, которые вы получаете, когда вы делаете это, чтобы мы могли устранить его лучше. ;)

+0

Есть какой-либо способ импортировать XML-файл без использования абсолютных путей и делать ЧЕРЕЗ программно, без создания отчета мастера? Спасибо –

+0

XML-файл - это то, что вы создали бы и будете жить в том же каталоге с вашим отчетом (мне нужно было создать мою руку вручную). Это в основном схема, которая сообщает Crystal о том, какие поля у вас будут доступны, чтобы вы могли раскрыть их в своем отчете. –