如果没有报告记录,则显示MessageBox

时间:2013-09-16 08:57:32

标签: sql-server-2008 delphi crystal-reports

我已经问了一个问题Here

我的这个问题只是向同一问题迈出了一步。

我有一个delphi代码,非常适合调用报告 但是,现在我想在打开rpt文件之前显示一个MessageBox。

我试图分别查询记录计数,然后决定使用MessageBox。但是,这个解决方案是最糟糕的情况,其中一个特定报告的查询本身需要3分钟来执行,然后再次查询同时打开rpt需要30秒才能加载(在第二个查询中它需要更少的时间可能是因为某些数据可能存在于缓冲/温度等等。)。

qPODPhy.close;
qPODPhy.SQL.clear;
qPODPhy.SQL.text :='select * from ViewName';
qPODPhy.Open;

If qPODPhy.RecordCount < 1 Then
   MessageBOx('No data To Display...');
Else
Begin
   crRep.Somproperties := Initialization 
   .
   .
   .
   CrRep.SQLQuery := qPODPhy.SQL.text;
   crRep.action := 1 
End

我的问题是:
如果特定视图的输出没有记录,我该如何显示MessageBox OR
有没有一种方法可以在delphi代码中打开.rpt文件的数据集,只检查记录的数量并做出决定?简而言之,是否有一些可以做到这一点的crystalreport组件属性?

2 个答案:

答案 0 :(得分:3)

你可以分别做一个选择计数(*),这要快得多。

或者也许只选择一条记录:SELECT TOP 1 ....

并且,正如RBA建议的那样,您可以尝试将SELECT COUNT放入存储过程中以获得更快的速度。

只是尝试使用这些方法来查看是否/何时获得了足够的速度。

答案 1 :(得分:0)

你在推送数据吗?您可以使用ReportDocument的ReadRecords方法并检查Rows.Count属性。如果报告正在检索数据,则可以使用ReportDocument的NoData事件。