1

我已经在这里问了一个问题。

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

我有一个非常适合调用报告的德尔福代码。
但是,现在我想在打开 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。
或者
有没有一种方法可以让我在 delphi 代码中打开 .rpt 文件的数据集并检查记录数并做出决定?简而言之,水晶报告组件是否有一些属性可以做到这一点?

4

2 回答 2

3

您可以单独进行选择计数(*),这要快得多。

或者可能只选择一条记录:SELECT TOP 1 ....

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

只需使用这些方法进行实验,看看您是否/何时获得了足够的速度。

于 2013-09-16T09:28:29.683 回答
0

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

于 2013-09-16T16:55:10.290 回答