1

私はすでに質問をここにしました。

私のこの質問は、同じ問題の一歩先です。

レポートの呼び出しに完全に機能するデルファイコードがあります。
しかし、今はrptファイルを開く前にMessageBoxを表示したかったのです。

レコード数を個別にクエリしてから、MessageBox を決定しようとしました。ただし、このソリューションでは、特定のレポートのクエリ自体の実行に 3 分かかり、rpt を開いて再度クエリを実行すると、読み込みに 30 秒かかるという最悪のケースがあります (2 番目のクエリでは、いくつかのデータが存在する可能性があるため、時間が短くなる可能性があります)。バッファー/一時的な場所など)。

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

私の質問は次のとおり
です。特定のビューの出力に対してレコードが表示されない場合、メッセージボックスを表示するにはどうすればよいですか。
または
、.rpt ファイルのデータセットを Delphi コードで開き、レコード数を確認して決定する方法はありますか? 要するに、これを行うことができる CrystalReport コンポーネントのプロパティはありますか?

4

2 に答える 2

3

select count(*) を個別に実行できます。これははるかに高速です。

または、1 つのレコードのみを選択することもできます: 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 に答える