关于打印预览的问题简单问题 (50分)

  • 主题发起人 主题发起人 andriy
  • 开始时间 开始时间
A

andriy

Unregistered / Unconfirmed
GUEST, unregistred user!
quickrep1和qrpreview1.
procedure TfrmMain.quickrep1Preview(Sender: TObject);
begin
QRPreview1.QRPrinter := TQRPrinter(Sender);
end;

然后是
query1.close;
query1.add(sqlTemp);
query1.open;
quickrep1.PreviewModeless;
quickrep1捆绑的 query1统计的记录总共有一万多条,预览结果需要很长时间才能完全显示。
在这个过程中预览大量占用系统资源,而且如果如果再次进行
query1.close;
query1.add(sqlTemp);
query1.open;
quickrep1.PreviewModeless;
就会抛出程序异常
各位大虾,有什么办法能解决这个问题?
 
你再次用query时一定要清空原有的sql语句,具体操作如下:
query1.open;
query1.close;
query1.sql.clear;
quickrep1.PreviewModeless;
我的建议是你最好是不要用queryq.open.他返回是一个不可写的记录基。
 
To:fuhaiwen
sqlTemp是根据条件动态生成的。
对数据库操作应该没有问题。
如果等的时间长或者统计数据少,可以完全显示,一切正常。
如果数据量大,预览页没有全部生成时,再次地
query1.close;
query.sql.clear;
query1.add(sqlTemp);
query1.open;
quickrep1.PreviewModeless;
就会发生异常
 
不预览,直接打印quickrep1.print;
 
你在用QReport的预览是一定要等待所有的页面生成完了,你才能退出预览,如果你
在生成的过程中退出了,再次使用预览(或别的操作),那么肯定会发生异常,可能是
因为Qreport使用后台线程进行预览数据的处理,中途退出就可能有某些资源没有释
放而造成异常。
解决:
1。你等待所有的页面生成完了,你才能退出预览。
2。控制Query一次返回的记录数。
3。换别的报表控件。
 
kk98:
1。如何判断页面已经生成完,我可以事先根据纪录数得到总页面数,在哪里可以得到当前
生成的页面数。
2。马上去试验
3。我用ReportBuild,预览最大才可看到五页,其他的控件有没有解决办法?
 
先QuickRep1.Prepare;
QuickRep1.QrPrinter.PageCount就是总页数.
这样的报表,用FastReport可能会好点.
 
接受答案了.
 
你可以在TQRPreview的OnPageAvailable事件中根据当前生成的页号与总页数比较,
如果相等,就表示所有页面都已生成完了。
procedure TWin_Preview.RptPreviewPageAvailable(Sender: TObject;
PageNum: Integer);
begin
caption:= '当前生成的页号为:'+IntToStr(PageNum)+' /总页数为:'+IntToStr();
if RptPreview.QRPrinter.PageCount= PageNum then
begin
{在这里设置允许预览窗口退出的控制变量}
end;
end;
 
kk98:
谢谢你,这种方法我已经试过了,还是无法彻底解决。
现在我用dbgrdeh了,就没有这个问题了
 
后退
顶部