将 adoquery1.Active:=true; quickreport5.DataSet.Active:=true; quickreport5.QRSubDetail1.DataSet.Active:=true; 提到 with adoquery1 do begin 之前 或则 QRDBTEXT的DATASET和quickrep的dataset直接挂adoquery1呀
procedure TForm4.Button1Click(Sender: TObject); var ifield:integer; begin adoquery1.SQL.Clear; adoquery1.SQL.Add('select * from 1'); adoquery1.SQL.Add('where pvend=:mfdm'); adoquery1.SQL.Add('and phcrno=:htbh'); adoquery1.Parameters.ParamByName('mfdm').Value:=dblookupcombobox1.KeyValue; adoquery1.Parameters.ParamByName('htbh').Value:=combobox1.Text; adoquery1.Open; for ifield:=0 to adoquery1.RecordCount-1 do begin quickReport5.QRDBText1.DataField:=adoquery1.Fields[0].Value; quickReport5.QRDBText2.DataField:=adoquery1.Fields[1].Value; quickReport5.QRDBText3.DataField:=adoquery1.Fields[2].Value; quickReport5.QRDBText4.DataField:=adoquery1.Fields[3].Value; quickReport5.QRDBText5.DataField:=adoquery1.Fields[4].Value; quickReport5.QRDBText6.DataField:=adoquery1.Fields[5].Value; quickReport5.QRDBText7.DataField:=adoquery1.Fields[6].Value; quickReport5.QRDBText8.DataField:=adoquery1.Fields[7].Value; QuickReport5.Preview; end; end;
quickrep的dataset设定了
不行
adoquery1.Active:=true;
quickreport5.DataSet.Active:=true;
quickreport5.QRSubDetail1.DataSet.Active:=true;
提到
with adoquery1 do begin
之前
或则 QRDBTEXT的DATASET和quickrep的dataset直接挂adoquery1呀
showmessage(inttostr(adoquery1.recordcount))
var
ifield:integer;
begin
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from 1');
adoquery1.SQL.Add('where pvend=:mfdm');
adoquery1.SQL.Add('and phcrno=:htbh');
adoquery1.Parameters.ParamByName('mfdm').Value:=dblookupcombobox1.KeyValue;
adoquery1.Parameters.ParamByName('htbh').Value:=combobox1.Text;
adoquery1.Open;
for ifield:=0 to adoquery1.RecordCount-1 do begin
quickReport5.QRDBText1.DataField:=adoquery1.Fields[0].Value;
quickReport5.QRDBText2.DataField:=adoquery1.Fields[1].Value;
quickReport5.QRDBText3.DataField:=adoquery1.Fields[2].Value;
quickReport5.QRDBText4.DataField:=adoquery1.Fields[3].Value;
quickReport5.QRDBText5.DataField:=adoquery1.Fields[4].Value;
quickReport5.QRDBText6.DataField:=adoquery1.Fields[5].Value;
quickReport5.QRDBText7.DataField:=adoquery1.Fields[6].Value;
quickReport5.QRDBText8.DataField:=adoquery1.Fields[7].Value;
QuickReport5.Preview;
end;
end;
2:将quickReport5.QRDBText1.DataField:=adoquery1.Fields[0].Value;改为
QRDBText1.DataField:=adoquery1.Fields[0].FieldName;
你再看一看;
quickReport5.QRDBText1.DataSet := ADOquery1;
新建一报表,在ColumnHeader里或是在pageHeader中放置了8个qrdbtext
然后用你的程序,但是,记住,每个
QREDBText.DataFields :=..的前边加一句
QREDBText.DataSet := ADOQuery1;
这样就可以了,你试一试看;
qredbedit.dataset := adoquery1;
这样就可以了,如果不是这种情况就是你的记录只有一条;
如:
qredbedit1.dataset := adoquery1;
QRDBText1.DataField:=adoquery1.Fields[0].FieldName;
qredbedit2.dataset := adoquery1;
QRDBText2.DataField:=adoquery1.Fields[1].FieldName;
...
...
qredbedit9.dataset := adoquery1;
QRDBText9.DataField:=adoquery1.Fields[8].FieldName;
这次肯定能行,你别着急;
一定会成功的
qredbedit.dataset := adoquery1;
这样就可以了,如果不是这种情况就是你的记录只有一条;
如:
qredbedit1.dataset := adoquery1;
QRDBText1.DataField:=adoquery1.Fields[0].FieldName;
qredbedit2.dataset := adoquery1;
QRDBText2.DataField:=adoquery1.Fields[1].FieldName;
...
...
qredbedit9.dataset := adoquery1;
QRDBText9.DataField:=adoquery1.Fields[8].FieldName;
这次肯定能行,你别着急;
一定会成功的
如果还不行的话,我下午过来再说吧;
但是这一定能行的,或者你用
其实你的那种方法也可以,只不过你放错了位置,你试一试下边的;
新建一报表,在ColumnHeader里或是在pageHeader中放置了8个qrdbtext
然后用你的程序,但是,记住,每个
QREDBText.DataFields :=..的前边加一句
QREDBText.DataSet := ADOQuery1;
这样就可以了,你试一试看;
=================================================
QRDBText9.DataField:=adoquery1.Fields[8].FieldName;
你这儿要取的是field的名子,不是它的值,如果不是fieldName就可能是DistplayText or Caption or ....
谢谢。
==========================
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, QRCtrls, QuickRpt, ExtCtrls;type
TForm2 = class(TForm)
QuickRep1: TQuickRep;
PageHeaderBand1: TQRBand;
DetailBand1: TQRBand;
QRLabel1: TQRLabel;
QRLabel2: TQRLabel;
QRLabel3: TQRLabel;
QRLabel4: TQRLabel;
QRDBText1: TQRDBText;
QRDBText2: TQRDBText;
QRDBText3: TQRDBText;
QRDBText4: TQRDBText;
QRDBText5: TQRDBText;
QRLabel5: TQRLabel;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
ADOQuery3: TADOQuery;
QRLabel6: TQRLabel;
QRLabel7: TQRLabel;
QRLabel8: TQRLabel;
QRLabel9: TQRLabel;
QRLabel10: TQRLabel;
QRLabel11: TQRLabel;
QRLabel12: TQRLabel;
QRLabel13: TQRLabel;
QRShape1: TQRShape;
QRShape2: TQRShape;
QRShape3: TQRShape;
QRShape4: TQRShape;
private
{ Private declarations }
public
procedure vPrint;
{ Public declarations }
end;var
Form2: TForm2;
zjh : String;implementation{$R *.dfm}{ TForm2 }procedure TForm2.vPrint;
var
QRL : TQRLabel;
I, J , K :integer;
xLeft, xTop, yTop ,Top, xHeight, xWidth :Integer;
QRLName : String;
begin
Top := 140;
yTop := 140;
K :=0;
xLeft := 8;
xTop := 144;
xHeight :=17;
xWidth :=89;
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from persornal where zjh = :zjh');
Parameters.Items[0].Value := zjh;
Open;
end;
with ADOQuery2 do
begin
Close;
SQL.Clear;
SQL.Add('select * from card where zjh = :zjh');
Parameters.Items[0].Value := zjh;// := ADOQuery1.FieldByName('zjh').ASString;
Open;
First;
end;
//================================
for I := 0 to ADOQuery2.RecordCount - 1 do
begin
for J := 0 to 7 do
begin
if ((xTop + 17 * I + 8) > 1000 ) then Break; //判断是否越界
QRL := TQRLabel.Create(self);
QRLName := 'QRL'+ IntToStr( 20 + K );//这是名子,可要可不要;
QRL.AutoSize :=False;
QRL.Parent := QRLabel1.Parent;// PageHeaderBand1;
QRL.Left := xLeft + J * 89 ;
QRL.Top := xTop + 17 * I + 8;
Top := QRL.Top;
QRL.Height := xHeight;
QRL.Width := xWidth;
QRL.Name := QRLName;
K := K + 1 ;
if J = 0 then
QRL.Caption := ADOQuery2.FieldByName('zsbh').AsString;//
if J = 1 then
QRL.Caption := ADOQuery2.FieldByName('czzl').AsString;//
if J = 2 then
QRL.Caption := ADOQuery2.FieldByName('khdw').AsString;//
if J = 3 then
QRL.Caption := ADOQuery2.FieldByName('khrq').AsString;//
if J = 4 then
QRL.Caption := ADOQuery2.FieldByName('zgxm').AsString;//
if J = 5 then
QRL.Caption := ADOQuery2.FieldByName('pzrq').AsString;//
if J = 6 then
QRL.Caption := ADOQuery2.FieldByName('fzjg').AsString;//
if J = 7 then
QRL.Caption := ADOQuery2.FieldByName('yxqz').AsString;//
K := K + 1 ;
QRL.Visible := True;
end;
ADOQuery2.Next;
//==========================================================
end;
Top := Top + 20;
with ADOQuery3 do
begin
Close;
SQL.Clear;
SQL.Add('select * from jcjl where zsbh = :zsbh');
ADOQuery3.Parameters.Items[0].Value := ADOQuery2.FieldByName('zsbh').AsString;
Open;
First;
end;
for J := 0 to 3 do
begin
QRL := TQRLabel.Create(self);
QRLName := 'QRL'+ IntToStr( 20 + K );//这是名子,可要可不要;
QRL.AutoSize :=False;
QRL.Parent := QRLabel1.Parent;// PageHeaderBand1;
QRL.Left := xLeft + J * 205 ;
QRL.Top := Top + 28;
yTop := QRL.Top ;
QRL.Height := xHeight;
QRL.Width := 205;
QRL.Name := QRLName;
if J = 0 then
QRL.Caption := '奖惩项目';//
if J = 1 then
QRL.Caption := '奖惩日期';//ADOQuery3.FieldByName('jcrq').AsString;//
if J = 2 then
QRL.Caption := '奖惩事由';//ADOQuery3.FieldByName('jcsy').AsString;//
if J = 3 then
QRL.Caption := '奖惩实施单位';//ADOQuery3.FieldByName('jcdw').AsString;//
K := K + 1 ;
end;
Top := yTop;
Top := Top + 17;
for J := 0 to ADOQuery3.RecordCount - 1 do
begin
QRL := TQRLabel.Create(self);
QRLName := 'QRL'+ IntToStr( 20 + K );//这是名子,可要可不要;
QRL.AutoSize :=False;
QRL.Parent := QRLabel1.Parent;// PageHeaderBand1;
QRL.Left := xLeft + J * 205 ;
QRL.Top := Top + 17 * J + 8;
QRL.Height := xHeight;
QRL.Width := 205;
QRL.Name := QRLName;
if J = 0 then
QRL.Caption := ADOQuery3.FieldByName('jcxm').AsString;//
if J = 1 then
QRL.Caption := ADOQuery3.FieldByName('jcrq').AsString;//
if J = 2 then
QRL.Caption := ADOQuery3.FieldByName('jcsy').AsString;//
if J = 3 then
QRL.Caption := ADOQuery3.FieldByName('jcdw').AsString;//
K := K + 1 ;
end;
end;end.