2016-07-25 54 views
0

在我的项目中,我有一个按钮,单击它时,应该从我的SQL Server数据库打印当前活动的所有合同。有数百个活跃的合约,但目前,当我按下按钮时,报表将加载,但报表不会。Crystal Reports不加载数据vb.net

我会尽我所能来证明这一点使用图像和代码,但任何人都能够说明为什么出现这种情况?

//代码打印按钮

Private Sub btnPrintActive_Click(sender As Object, e As EventArgs) Handles btnPrintActive.Click 

    Try 
     Dim objlist As New ReportDocument 
     objlist.Load(readIni("REPORTS", directorypath & "connectionpaths.ini") & "\ContractList.rpt") 

     Dim info As CrystalDecisions.Shared.TableLogOnInfo 
     info = New CrystalDecisions.Shared.TableLogOnInfo() 

     info.ConnectionInfo.DatabaseName = "" 
     info.ConnectionInfo.ServerName = readIni("CONTRACTSTRING", directorypath & "connectionpaths.ini") 
     info.ConnectionInfo.Password = "" 
     info.ConnectionInfo.UserID = "" 
     objlist.Database.Tables(0).ApplyLogOnInfo(info) 

     objlist.RecordSelectionFormula = "{tblContracts.Agreement} = 'ACTIVE'" 

     Dim f As frmReports 
     f = New frmReports(con, acccon, "", 0, "", acccon, , objlist, ,) 
     f.Show() 

    Catch ex As Exception 
     errorLog(ex.Message, ex.StackTrace) 
     MsgBox("Failed to retrieve contract information from 'database', refer to error log") 
    End Try 

End Sub 

//这是报告的形式,但没有报告

enter image description here

//证明有积极的报道

enter image description here

+0

这是一个全新的表单/报表,从未工作,或突然不再工作? –

+0

由于表单没有显示报告,而是显示没有数据的报告,您是否验证过a)'.rpt'文件是应用程序正在查找的位置,以及b)“frmReports”正在加载它?我们可能需要在'frmReports'中看到构造函数。 –

+0

helloo @David ..是否解决了这个问题? –

回答

0

这现在已经修复。问题是我在报告中使用了2个数据库表,但只提供了1的登录信息,第二个没有从服务器接收数据,因此它没有显示。我做的另一件事,改变了它以空白值登录的事实。我的固定代码现在是这个;

Private Sub btnPrintActive_Click(sender As Object, e As EventArgs) Handles btnPrintActive.Click 

    Try 
     Dim objlist As New ReportDocument 
     objlist.Load(readIni("REPORTS", directorypath & "connectionpaths.ini") & "\ContractList.rpt") 

     Dim info As CrystalDecisions.Shared.TableLogOnInfo 
     info = New CrystalDecisions.Shared.TableLogOnInfo() 

     Dim servername As String = (readIni("SQLConnection", directorypath & "connectionpaths.ini", "servername")) 
     Dim database As String = (readIni("SQLConnection", directorypath & "connectionpaths.ini", "database")) 
     Dim username As String = (readIni("SQLConnection", directorypath & "connectionpaths.ini", "username")) 
     Dim password As String = (readIni("SQLConnection", directorypath & "connectionpaths.ini", "password")) 
     Dim provider As String = (readIni("SQLConnection", directorypath & "connectionpaths.ini", "provider")) 

     info.ConnectionInfo.DatabaseName = database 
     info.ConnectionInfo.ServerName = servername 
     info.ConnectionInfo.Password = password 
     info.ConnectionInfo.UserID = username 

     objlist.Database.Tables(0).ApplyLogOnInfo(info) 
     objlist.Database.Tables(1).ApplyLogOnInfo(info) 

     objlist.RecordSelectionFormula = "{tblContracts.Agreement} = 'ACTIVE'" 

     Dim f As frmReports 
     f = New frmReports(con, acccon, "", 0, "", acccon, , objlist, ,) 
     f.Show() 

    Catch ex As Exception 
     errorLog(ex.Message, ex.StackTrace) 
     MsgBox("Failed to retrieve contract information from database, refer to error log") 
    End Try 

End Sub 
0

尝试比较这一个:

try 
      { 

       String APPPATH = String.Empty; 
       CRPT = new ReportDocument(); 
       APPPATH = System.IO.Directory.GetCurrentDirectory() + "/CrystalReport/CrystalReport1.rpt"; 
       //APPPATH = "~/Crystal_report/mosum.rpt"; 
       CRPT.Load(APPPATH); 
       crViewer.RefreshReport(); 

       CLASS_PROJECT.crystalReportcls rptcls = new CLASS_PROJECT.crystalReportcls(); 

       ParameterFields paramFields = new ParameterFields(); 
       ParameterField paramField = new ParameterField(); 
       ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue(); 
       paramField.Name = "sdate"; 
       paramDiscreteValue.Value = "2016-07-01"; 
       paramField.CurrentValues.Add(paramDiscreteValue); 
       paramFields.Add(paramField); 


       crViewer.ParameterFieldInfo = paramFields; 
       crViewer.ReportSource = CRPT; 


       MessageBox.Show("Crystal logged in."); 
       CRPT.SetDatabaseLogon("dbusername", "dbpassword"); 
       rptcls.LogonCrystalReport(crViewer); 

      } 
      catch (Exception er) 
      { 

       MessageBox.Show(er.Message); 
      } 

这种结构正在为我的样本。你所要做的就是登录水晶报告和报告路径本身。