我目前正致力于将Windows应用程序从VB6升级到VB.NET。该应用程序的一个组件包括Crystal Reports。我对VB和Crystal Reports一般非常新,所以我需要一些帮助。
让我首先说我得到报告来提取正确的数据并且没有语法错误但是当我尝试使用大量记录来提取数据时,需要很长时间才能加载。防爆。其中一个查询包含返回的16000多行,在VB6版本中需要约1.5秒,但在.Net版本中需要18分钟。我确信我可以采取一些措施来提高报告效率,但由于我没有充分利用它,我需要帮助才能走上正轨。当报告试图提取少量数据时,我没有遇到任何问题。
要生成报告,我正在使用数据集,我认为这是减慢加载时间的部分。下面是我设置SQL查询的方式示例以及设置数据集的方式。
sSQLQry = “SELECT [COLUMN_NAMES] from Table1, Table2, Table3, Table4 WHERE [condition] ORDERBY col1,col2,col3 ASC
cnn = New SqlConnection(connectionString)
cnn.Open()
Dim dscmd As New SqlDataAdapter(sSQLQry, cnn)
Dim ds As New my_dataset
dscmd.Fill(ds, "table1")
dscmd.Fill(ds, "table2")
dscmd.Fill(ds, "table3")
dscmd.Fill(ds, "table4")
crystalreport1.SetDataSource(ds)
CrystalReportViewer1.Height = Me.Height
CrystalReportViewer1.Width = Me.Width
CrystalReportViewer1.Show()
CrystalReportViewer1.ReportSource = crystalreport1
现在我认为它缓慢的原因是因为4种填充方法,但我不确定如何解决这个问题。任何帮助是极大的赞赏。
答案 0 :(得分:0)
试试这个代码我在c#和oracle数据库中使用它,但我相信它可以帮助你:
CRAXDRT.DatabaseTable T;
for (int i = 1; i <= report1.Database.Tables.Count; i++)
{
T = (CRAXDRT.DatabaseTable)report1.Database.Tables[i];
CRAXDRT.ConnectionProperties cps = T.ConnectionProperties;
CRAXDRT.ConnectionProperty cp =
(CRAXDRT.ConnectionProperty)cps["User ID"];
cp.Value = "Username" ;
cp = (CRAXDRT.ConnectionProperty)cps["Password"];
cp.Value = "Password" ;
cp = (CRAXDRT.ConnectionProperty)cps["Data Source"];
cp.Value = "DataSource" ;
T.SetLogOnInfo("DataSource", "", "Username", "Password");
}
答案 1 :(得分:0)
Crystal Reports在ADO.NET数据源中存在多个表的已知问题。连接数据真的很慢。
我们要做的就是在单个表(平面文件)中创建数据,然后报告非常快。他们永远都有这个问题而且没有做任何事情,所以不要屏住呼吸,他们会尽快解决。