怎样实现查询结果的打印(50分)

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

amyda2002

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠请帮忙,我是DELPHI的初学者,正在做一个出入库系统,现在遇到一个问题:
我是按日期和器材名称做的查询,现在想要实现查询结果的打印功能。看了书上关于
QuickReport的内容,它只能用来打印整张表。但我的查询结果肯定只是表中符合查询
条件的部分,怎么办呢?是不是得建立一个临时表,然后把查询结果放进去,就可以
打印这个临时表了?具体应该怎么做呢,请帮忙,越具体越好,谢谢了
 
用EhLib中的DBGridEh和PrnDbgEh控件,可以实现将DBGrid表格中显示的数据直接打印出来.
EHLib在http://www.playicq.com有下载.
 
你可以用TQuery执行查询,然后再用QReport打印啊
 
建议你使用RBulider.用它可以很方便的实现你所要的功能。
 
你的理解有错误,QuickReport并不是打印整个表,而是打印整个数据集,
如果你用了Table控件又没加Filter,才会打印整个表。如果你用的数据集
是Table加Filter或者是Query,那就只打印筛选出来的记录了。
用QuickReport->DataSource->Query即可,看你的查询是怎么做的了。
你看的是哪本书?!上传到大富翁来当众销毁!
 
这里有一段源代码,你可以参照,是打印dbgrid的。
procedure TForm1.Button1Click(Sender: TObject);
const
leftblank=1;
rightblank=1;
topblank=1;
bottomblank=1;
var
pointx,pointy:integer;
printstep:integer;
previewscale,x,y,i:integer;
s:string;
begin

previewscale:=strtoint(edit1.Text);
pointx:=trunc(GetDeviceCaps(printer.Handle,LOGPIXELSX)/2.54);// div previewscale;
pointy:=trunc(GetDeviceCaps(printer.Handle,LOGPIXELSY)/2.54);// div previewscale;
form2:=Tform2.Create(self);
Form2.Image1.Canvas.Font.Name:='宋体';
form2.Image1.Canvas.Font.Size:=10;
s:='商品信息';
printstep:=Form2.Image1.Canvas.TextHeight(s);

x:=leftblank;
y:=topblank;
if (query1.Active=true) and (query1.RecordCount>0) then
begin
query1.first;
while not query1.eofdo
begin
for i:=0 to DBGrid1.FieldCount-1do
begin
if (x+DBGrid1.Columns.Items.Width)<=(Printer.PageWidth-pointx*rightblank) then
{pointx*rightblank得到的是什么?}
begin
form2.Image1.Canvas.Rectangle(x,y,(x+4+DBGrid1.Columns.items.Width)*pointx,pointy*(y+4+printstep));
if y=topblank then
form2.Image1.Canvas.TextOut(x+2,y+2,DBGrid1.Columns.Title.Caption)
else
form2.Image1.Canvas.TextOut(x+2,y+2,DBGrid1.Fields.AsString);
end;
x:=x+DBGrid1.Columns.Items.Width;
end;
if not (y=pointy*topblank) then
query1.Next;
x:=leftblank;
y:=y+(printstep+8);
end;
application.MessageBox('预览完成','提示',32);
end;
form2.Show;
end;
 
放结果放到一个临时表里面是一个比较省力的办法,实现起来也比较容易。
使用Query将查询结果放到一个临时表中。
然后使用QuickRep直接指向这个临时表,并将报表做好。必要时候打印就可以了。
 
用 Quick report
 
To blad_pitt:
  老大!你的代码还没改就给人家贴出来了!Faint……
 
谢谢各位,但我是初学者,这又是我的第一个程序,我还不太会用Qreport,我用的TABLE+FILTER
现在只是看书用Quick Report Wizard,但它用的是另一个FORM,没办法跟我做查询的FORM关联。
我在我做的查询的FORM上添加Qreport构件,并设置它指向相应的数据表,预览里什么都没有。
是不是Qreport的表上还要加其它的构件呀?还有,做一个名为“打印”的BUTTON,在里面添加什么代码
才能实现?
 
你有两点错误
1、“QuickReport只能打印整个表”
报表只是忠实地打印数据集的数据,是整个表还是查询结果,取决
于你的数据集控件是否加了筛选(比如用Filter或用Query);
2、“QuickReport的Form没办法跟查询form关联”
你能用“控件.属性”来访问属性,当然也能用“窗体.控件.属性”来
访问别的窗体中的对象和对象属性。
问题嘛,是简单地……操作嘛,是麻烦地……如此……这般……
1、做一个窗体,在上面添加一个QuickReport控件。
2、添加标题TitleBand、表头HeaderBand、数据detailBand各一个;
3、在DetailBand中添加两个QRDBText;
4、假设你的查询窗体叫Form1,表叫Table1,报表窗体叫FormReport,报表控件叫QReport1;
5、报表的Dataset属性设置为Form1.Table1;
6、两个QRDBtext的Dataset属性也设置为form1.Teble1,DataField属性设置为相应的两个字段;
7、Form1上的打印按钮里写:FormReport.QReport1.PreviewModal;
8、QReport1的AfterPreview中写 Qreport1.Free;
8、运行试一试;
9、有时间学学SQL语句,用Query,以后你做程序不可能不用Query的,但有可能不用Table :-)
 
fastreport也可以
 
无话可说
 
用ADO连接,用ADODATASET的commandtext进行查询再打印也可以完成!
 
楼主去买《Delphi6从入门到精通》了……
 
谢谢各位指点。我学的太浅了,才问这么愚蠢的问题,多谢耐心指点。
 
后退
顶部