单次打开出现问题的形况比较少,反复操作几次就可能出错了打开报表有时成功有时出错(打开后就停死在那里了,有时候有提示:a component named QRStandradpreview already exists)
大家帮帮忙,谢谢了
unit uMerchandiseReport;interfaceuses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,
  StdCtrls, ExtCtrls, Forms, QuickRpt, QRCtrls, DB, DBTables;type
  TMerchandiseReport = class(TForm)
    QuickRep1: TQuickRep;
    PageFooterBand1: TQRBand;
    QRExpr1: TQRExpr;
    ColumnHeaderBand1: TQRBand;
    DetailBand1: TQRBand;
    QRLabel3: TQRLabel;
    QRExpr4: TQRExpr;
    QRLabel4: TQRLabel;
    QRExpr5: TQRExpr;
    QRLabel5: TQRLabel;
    QRLabel6: TQRLabel;
    QRExpr6: TQRExpr;
    QRExpr7: TQRExpr;
    TitleBand1: TQRBand;
    QRLabel7: TQRLabel;
    QRLabel8: TQRLabel;
    QRExpr8: TQRExpr;
    QRLabel1: TQRLabel;
    QRExpr2: TQRExpr;
    QRBand1: TQRBand;
    QRLabel10: TQRLabel;
    QRExpr9: TQRExpr;
    QRExpr10: TQRExpr;
    QRLabel11: TQRLabel;
    QRLabel12: TQRLabel;
    QRExpr11: TQRExpr;
    QRLabel2: TQRLabel;
    QRLabel9: TQRLabel;
    QRLabel13: TQRLabel;
    QRExpr13: TQRExpr;
    QRExpr12: TQRExpr;
    QRExpr3: TQRExpr;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure QuickRep1AfterPreview(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
     procedure init;
  end;var
  MerchandiseReport: TMerchandiseReport;implementation
{$R *.DFM}
uses uCommon;
{ TQuickReportF }procedure TMerchandiseReport.init;
begin
try
  QuickRep1.DataSet:= global.merchandiseDB.query;
  global.merchandiseDB.Browse('*');
  QRExpr2.Expression :='[outPrice]';
  //QRExpr3.Expression :='[PinyinName]';
  QRExpr4.Expression :='[MerchandiseName]';
  QRExpr5.Expression :='[MerchandiseUnit]';
  QRExpr6.Expression :='[inPrice]';
  QRExpr7.Expression :='[MerchandiseNum]';
  QRExpr8.Expression :='[Discount]';
  QuickRep1.Zoom := 100;
  QuickRep1.PreviewModal;
  global.merchandiseDB.CloseQuery;
except
   on e:Exception do
       begin
       global.messageBoxTop( pchar(e.Message),'Exception',MB_ICONERROR );
       end;
end;end;procedure TMerchandiseReport.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
Action:=caFree;
end;procedure TMerchandiseReport.QuickRep1AfterPreview(Sender: TObject);
begin
close;
end;procedure TMerchandiseReport.FormActivate(Sender: TObject);
begin
init;
end;end.//////////////////
调用的代码
function TMain.CreateMIDChild(mainForm:TForm; className:TFormClass; var ref): boolean;
var
   i:integer;
begin
     if self.MDIChildCount >= 2 then
       begin
       global.messageBoxTop('请关闭其它窗口,不然不能打开','提示');
       exit;
       end;
     for i:=0 to mainForm.MDIChildCount-1 do
         begin
         mainForm.MDIChildren[i].Close;
         end;
     ImagePanel1.Hide;
     Application.CreateForm(className,ref);
end;procedure TMain.SpeedButton9Click(Sender: TObject);
var
  Child: TMerchandiseReport;
begin
  CreateMIDChild(self,TMerchandiseReport,Child);
  child.Caption:=trim((Sender as TSpeedButton).Caption);
end;
end;