老大,你循环创建了这四个qrlable,循环10次,就是创建了40个qrlable,而不是4个。开始你只是释放上次创建的最后四个,当然还剩下36个。举个例子:
var l: TLable;
begin
  l := TLable.Create(Self); // 创建了一个
  l := TLable.Create(Self); // 由创建了一个,前一个指针丢失
  l.Free;    //只是释放了后一个 l
end;

解决方案 »

  1.   

    为了保证完全清除上次动态创建的项,可以在下一次使用报表前这样写:
    QRep.Bands.HasDetail := false; //假设你动态创建的项在DetailBand上
    QRep.Bands.HasDetail := true;
    —————————————————————————————————
    MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
                 毁誉由人,望天上云卷云舒,聚散任风。';
    if Not Assigned(I) then
      I := TI.Create(Nil);
    I.Maxim := MaximStr;
    I.Explain := '假如上述代码中出现“OA”等字样,删除它们';
    I.Desire := '加不加分随你';
    —————————————————————————————————
           
      

  2.   

    if  Application.FindComponent('qrpsf')<>  nil  then
            begin
                    qrpsf.Free;
                    Application.CreateForm(Tqrpsf, qrpsf);
                    iniprint;
                    qrpsf.Preview;
             end
    else
             begin
             try
                            Application.CreateForm(Tqrpsf, qrpsf);
                            iniprint;
                            qrpsf.Preview;
             except
             showmessage('创建窗口失败!');
             exit;
             end;
    end;
    ////////////
    以上是我自己解决的代码:)
      

  3.   

    同意 ssdjmcj8048(不爱我的我不爱
    但是我觉得不用创建这么多。只要4个就可以了。去掉For 循环。
    用QUERY跟报表连接。