function CreateQRDBText(const AParent: TWinControl; const ALeft, ATop,
  AWidth: Integer; const AFieldName, AMask: string; const ADataSet: TDataSet;
  const AAlignment: TAlignment): TQRDBText;
begin
  Result := TQRDBText.Create(AParent);
  with Result do begin
    Parent := AParent;
    AutoSize := False;
    WordWrap := False;
    Left := ALeft;
    Top := ATop;
    Width := AWidth;
    DataField := AFieldName;
    DataSet := ADataSet;
    Mask := AMask;
    Alignment := AAlignment
  end
end;

解决方案 »

  1.   

    谢谢 chechy(chechy) 我还没 实验,呆会去实验看看怎么样
      

  2.   

    关于自动生成报表,我讲以下几点:
    1、首先需要一个QuickReport
    2、在QuickReport生成必要的Band,象你的报表ColumnBand和DetailBand是必须得,可以参考QuickRep.Bands属性
    3、在Bands上生成相应的QRLabel和QRDBText。在ColumnBand上生成基本上都是QRLabel,在DetailBand上生成的基本上都是QRDBText,在生成的时候注意排版。我写的函数就是生成QRDBText的例子(Parent应该传DetailBand)
    4、设置QuickRep的DataSet等属性
    这样报表就生成了。比较烦琐,不过写的好能解决很大的问题。
      

  3.   

    先求出query个数,n:=query.fieldcount;
    用循环生成即可,
    var    
       qrlab: TQrLabel;
       qrdbtext:tqrdbtext;
    ...
    for i:=0 to n-1
    begin
      qrlab:=tqrlabel.create(self);
         qrlab.Parent:=printform.ColumnHeaderBand1;
         qrlab.left:=round(weidth/(n+1))*i;
         qrlab.top:=yourvalue;
         qrlab.Caption:='name'
         qrlab.AutoSize := False;
         qrlab.WordWrap := False;
             qrdbtext:=tqrdbtext.create(self);
         qrdbtext.Parent:=printform.DetailBand1;
         qrdbtext.left:=round(width/(n+1))*i;
         qrdbtext.top:=yourvalue;
        // qrdbtext.Alignment:=taRightjustify;
         qrdbtext.DataSet:=query1;
         qrdbtext.DataField:=query1.fields[i+2].FieldName;
    end;