[英]Crystal Reports with large data takes long time to load
我目前正在將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種填充方法,但是我不確定如何解決該問題。 任何幫助是極大的贊賞。
試試這個代碼,我在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");
}
Crystal Reports在ADO.NET數據源中存在多個表的已知問題。 鏈接數據確實很慢。
為了解決這個問題,我們要做的就是在單個表(平面文件)中創建數據,然后報表就非常快。 他們永遠都遇到這個問題,並且對此沒有做任何事情,所以不要屏住呼吸,他們很快就會解決它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.