2015-10-21 1 views
0

Я разрабатываю хрустальный отчет в Visual Studio 2008, который использует пару различных баз данных в качестве DataSource. Все работало отлично, пока я пытаюсь, чтобы перейти к странице 2. Код, который работает (потому что он имеет ограниченные результаты) выглядит следующим образомОшибка входа в систему при переходе на следующую страницу в Crystal Reports VS2008

Dim mssqlstr As String 
mssqlstr = "SELECT TOP 1 t1.*, t2.column1, t2.column2 FROM 
     tablename1 As t1, tablename2 As t2 WHERE t1.ID = '" & txtID.Text & "' 
     AND t2.column2 = RTRIM(LEFT(t1.column_2, 2)) ORDER BY t1.ID DESC" 
Dim DAms As New OleDbDataAdapter(mssqlstr, conn) 
DAms.Fill(dsQRpt, "tablename") 

'The code below is shared by the other subreport functions 
QPrpt.Load(Server.MapPath("crreport.rpt")) 
QPrpt.SetDataSource(dsQRpt) 
crQtrProgress.ReportSource = QPrpt 
crQtrProgress.RefreshReport() 

Но когда мне нужно больше результирующего набора из этого запроса

mssqlstr = "SELECT column1, column2 FROM tablename ORDER BY ID DESC" 

Я получаю ошибку

Ошибка входа.
Подробности: crdb_adoplus: Ссылка на объект не установлена ​​в экземпляр объекта.
Ошибка в файле C: \ Users \ АЛЬФРЕД ~ 1.CAL \ AppData \ Local \ Temp \ rptQuarterlyProgress {10667888-35C5-41CA-93EF-214A64741965} .RPT: Невозможно подключиться: некорректный журнала по параметрам «

.

Оба запроса используют ту же строку подключения и поля отчета приходят от сопротивления и упал полей в таблицу (.xsd)

следует также отметить, что в докладе используется несколько подотчетов с каждым подотчет приходит из другого DataSource. Все подзаголовки кодируются одинаково и работают нормально, за исключением тех случаев, когда результаты должны переноситься на следующую страницу. Если я ограничу количество результатов, тогда я получаю желаемые результаты из каждого отчета, но если e данные переносятся на другую страницу ... kaboom! Я получаю «Невозможно подключиться ...» Ошибка.

Также DataSet подключается к базе данных и без проблем отображает данные таблицы. Я искал решение, но не нашел ничего, что соответствовало бы моей ситуации.

Спасибо за любую помощь предложило

РЕШЕНИЯ Заслуги haraman для предоставления ответа. Вот рабочий код

Dim dsQRpt = New Data.DataSet 
    Dim QPrpt = New ReportDocument 

Protected Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load   

     If Page.IsPostBack Then 
      If Session.Item("CRpt") IsNot Nothing Then 
       QPrpt = Session.Item("CRpt") 
      End If 
      crQtrProgress.ReportSource = QPrpt 
      crQtrProgress.RefreshReport() 
     Else 
      If Session.Item("CRpt") IsNot Nothing Then 
       Session.Remove("CRpt") 
      End If 
      Session.Add("CRpt", QPrpt) 
     End If 

    End Sub 

Protected Sub btRunReport_Click(ByVal sender As Object, ByVal e As System.EventArgs) 

     Dim mssqlstr As String  
     mssqlstr = "SELECT column1, column2 FROM tablename ORDER BY ID DESC" 

     Dim DAms As New OleDbDataAdapter(mssqlstr, conn)  
     DAms.Fill(dsQRpt, "tablename") 

     'Populate Report 
     QPrpt.Load(Server.MapPath("crreport.rpt"))    
     QPrpt.SetDataSource(dsQRpt) 
     crQtrProgress.ReportSource = QPrpt 

     Session.Add("CRpt", QPrpt) 

End Sub 
+0

Вы используете приложение WinForms или WebForms? И какая база данных? – haraman

+0

Это веб-приложение с использованием базы данных SQL Server – Cal37

ответ

2

Кажется, CrystalReportViewer теряет ReportDocument на PostBack. Вы можете попробовать сохранение ReportDocument в сеансе, а затем на PostBack переназначить его на CrystalReportViewer на Pageload событие, как

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    QPrpt.Load(Server.MapPath("crreport.rpt")) 
    QPrpt.SetDataSource(dsQRpt) 

    If Page.IsPostBack Then 
     If Session.Item("CRpt") IsNot Nothing Then 
      QPrpt = Session.Item("CRpt") 
     End If 
    Else 
     If Session.Item("CRpt") IsNot Nothing Then 
      Session.Remove("CRpt") 
     End If 
     Session.Add("CRpt", QPrpt) 
    End If 
    crQtrProgress.ReportSource = QPrpt 
    crQtrProgress.RefreshReport() 
End Sub 

Protected Sub Page_Unload(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Unload 
    If Session.Item("CRpt") IsNot Nothing Then 
     Session.Remove("CRpt") 
    End If 
    Session.Add("CRpt", QPrpt) 
End Sub 

В случае, если вы имеете конкретную проблему в установке LogOnInfo, то вы также можете проверить это SO размещать Report asking for database login on setting DataTable as DataSource

+0

Чувак, вы рок! Придется сделать несколько незначительных корректировок, но это именно то, что мне нужно. Я обновляю свой пост рабочим кодом. Благодаря! – Cal37

Смежные вопросы