CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

????问过好几次的问题了,关于打印????

楼主hyl_1978(summer)2001-11-30 10:42:12 在 Delphi / VCL组件开发及应用 提问

与quickrep相连的表中字段为:姓名   成绩  
  请问如何输出下面格式的报表:  
        姓名     张三     李四     王五  
        成绩     100       95         88  
  问题点数:35、回复次数:21Top

1 楼hyl_1978(summer)回复于 2001-11-30 10:47:10 得分 0

还是没人回答,是不是我没说清楚??Top

2 楼genphone_ru(哎,什么都要学,真累)回复于 2001-11-30 10:49:59 得分 0

用QRLabel直接赋值吧!Top

3 楼marysxj(走自己的路,让别人打的去吧!)回复于 2001-11-30 10:51:00 得分 0

我有一种方法,但是可能比较麻烦.没有试过行不行.不过,你这里如果数据库里有两个重名字的人,就不好办了.你的问题能否具体一点?Top

4 楼kories(老实疙瘩)回复于 2001-11-30 10:56:20 得分 0

quickrep是比较基础的报表制作组件,不支持太灵活的报表打印。  
  你可以在数据库的角度解决这个问题,这也的话,就变成了一个记录-字段(所谓行变列)的经典问题,是比较容易解决的,通过SQL语句,将那个表转换为你所要的报表的二维表的格式,问题就迎刃而解了。  
  知道怎么搞吗?通过一个游标(Cursor)对那个表的记录进行循环,把记录对应Create成临时表的一个字段,然后Union在一起就OK了。  
  如果你用SQL   Server数据库,我可以给你提供相关的SQL   Source   Code,我在Handle台北市环保局的MIS专案时候,指导程序员做了N*M个那种报表,都是很复杂的,一个Stored   Procedure要些几百行!Top

5 楼hyl_1978(summer)回复于 2001-11-30 10:58:38 得分 0

marysxj:没有重名的。  
  就拿我举的这个例子来说吧!  
  非常感谢!  
  Top

6 楼hyl_1978(summer)回复于 2001-11-30 11:02:48 得分 0

kories:我用的是sql   server。  
  请把   SQL   Source   Code   e-mail给我吧  
  e-mail:haoyongli2000@163.comTop

7 楼marysxj(走自己的路,让别人打的去吧!)回复于 2001-11-30 11:08:22 得分 0

你等一会,我试试行不行再给你Top

8 楼AP()回复于 2001-11-30 11:10:02 得分 0

1   自己写打印的程序就行了,不需要使用   QuickReport  
  2   将需要的数据按需要的格式生成到表中   再用   QuickReport  
  3   找一支持该功能的组建Top

9 楼hyl_1978(summer)回复于 2001-11-30 11:17:16 得分 0

小丸子,好了吗?Top

10 楼hyl_1978(summer)回复于 2001-11-30 11:24:32 得分 0

ap(),你的意思是不是需要动态生成,  
  我还不会动态生成表,能不能详细点?Top

11 楼hyl_1978(summer)回复于 2001-11-30 11:26:02 得分 0

老实疙瘩,还有别的作报表的工具吗?Top

12 楼adailee(Adai Lee)回复于 2001-11-30 11:29:55 得分 0

我做报表,总是先写一个存储过程,取的一张和报表类似的结果集,  
  然后在快速报表中直接使用。这样前端工作最少。  
  在存储过程中翻转行列不是很难吧?Top

13 楼hyl_1978(summer)回复于 2001-11-30 11:32:05 得分 0

adailee(不谈恋爱的铅笔) :  
  麻烦你告诉我怎样在存储过程中翻转行列?   Top

14 楼kories(老实疙瘩)回复于 2001-11-30 11:38:29 得分 0

Adailee的意见我认为不错的,我也指导我的程序员这样干,尽量使Client端瘦起来。  
  我EMail给你类似的Stored   Procedure好了,不过比较复杂,你要仔细读。Top

15 楼hyl_1978(summer)回复于 2001-11-30 11:39:17 得分 0

关注关注关注关注关注关注关注!!!!!Top

16 楼hyl_1978(summer)回复于 2001-11-30 11:41:53 得分 0

老实疙瘩,先谢谢你了。Top

17 楼marysxj(走自己的路,让别人打的去吧!)回复于 2001-11-30 11:50:34 得分 0

我给你发了一个例子,你自己看看吧,我没有时间了,非常抱歉.Top

18 楼kories(老实疙瘩)回复于 2001-11-30 12:46:19 得分 35

/*********************************************************************  
  --Fuction:   行变列  
  --Author:   Kories  
  --LastUpdate:   2001/11/30  
  *********************************************************************/  
  If   exists   (  
                          select   *   from   sysobjects    
                          where   id   =   object_id('MyProc')   and   sysstat   &   0xf   =   4  
                      )  
      drop   procedure   MyProc    
  go  
   
  create   procedure   MyProc      
  as  
  begin  
      create   table   #MyTmpTable(  
          姓名·成绩   char(8)  
      )  
      declare   C1   cursor   for  
          select   *   from   Table1  
      open   C1  
      declare   @ID   smallint,@Name   Varchar(10),@Ach   Float  
      fetch   C1   into   @ID,@Name,@Ach  
      while   @@fetch_status=0   begin  
          exec('alter   table   #MyTmpTable   add   '+'F'+@ID+'   Varchar(10)')  
          fetch   C1   into   @ID,@Name,@Ach  
      end  
      close   C1  
      --以上程序建立临时表结构  
      insert   #MyTmpTable(姓名·成绩)   values('姓名')  
      insert   #MyTmpTable(姓名·成绩)   values('成绩')  
      --以上插入静态记录  
      open   C1  
      fetch   C1   into   @ID,@Name,@Ach  
      while   @@fetch_status=0   begin  
          exec('update   #MyTmpTable   set   '+   'F'   +@ID   +   '='   +   ''''+   @Name   +''''   +   '   where   姓名·成绩='   +   ''''   +   '姓名'   +   '''')  
          exec('update   #MyTmpTable   set   '+   'F'   +@ID   +   '='   +   ''''+   @Ach   +''''     +   '   where   姓名·成绩='   +   ''''   +   '成绩'   +   '''')  
          fetch   C1   into   @ID,@Name,@Ach  
      end  
      --以上程序插入动态记录  
      close   C1  
      deallocate   C1  
      --释放变量  
      select   *   from   #MyTmpTable  
      --得到结果集  
  end    
  go  
   
  /*执行下边Sql   Script得到表结构  
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[Table1]')   and   OBJECTPROPERTY(id,   N'IsUserTable')   =   1)  
  drop   table   [dbo].[Table1]  
  GO  
   
  CREATE   TABLE   [dbo].[Table1]   (  
  [ID]   [int]   IDENTITY   (1,   1)   NOT   NULL   ,  
  [Name]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [Ach]   [float]   NULL    
  )   ON   [PRIMARY]  
  GO  
  */  
   
  你好,我看了一下台北环保局MIS的Source   Code,委实太复杂了,500行的Stored   Procedure你没有完整的Database   Shcema,很难看懂,就给你写了个简单的,你看一下,在Sql2000下运行OK。我写的只是例子程序,你要改造为实用的,要自己花一些工夫,比如,有可能存在总计一类的东东,你自己研究吧,其实都很简单。一定要把Cursor用熟,用灵活,很多数据可以两级以上Cursor套起来查询得到。OK?祝你好运,如果有疑惑再问。Top

19 楼belllab(菜鸟)回复于 2001-11-30 13:08:15 得分 0

在报表的ONNeedData中自己获取数据就行了Top

20 楼txinfo(冰炎两重天)回复于 2001-11-30 15:01:26 得分 0

放张凳子,旁听一下  
  呵呵,系统居然不让偶只录入gzTop

21 楼spell(问到底)回复于 2001-11-30 15:52:10 得分 0

有个笨办法.  
  1.定义一个足够大的固定二维数组,将表中的数据存入数组中.  
  2.在quickrep中先设定好足够多的QRDBtext控件.  
  3.在每次打印之前先将每个控件符值ok!Top

相关问题

  • 问了好几次都没人回答的问题
  • 关于QueryString ,UrlEncode ,UrlDecode的问题,问了好几次了
  • 这个问题提了好几次了 总是没有答案!!!!
  • 个性化界面问题,好几次没有一个人回?
  • 求助啊!!!帮我!!已经问了好几次了
  • webbrowser控件如何实现打印当前网页?我问了好几次了、也试了也没成功。难道就没人回答我了吗?我出100分!
  • 这个问题我发了好几次也发不上去为什么?
  • 发了好几次都没人解决的问题!~~~ATL的调用
  • ActiveReport 2.0打印时, 预览只有一页, 为何打出时, 后面还跟一张空白纸? 试了好几次次都这样。
  • 问了好几次的问题谁能给我一个完美的答复再加分.

关键词

  • 报表
  • 字段
  • 打印
  • 存储过程
  • 数据库
  • 数据
  • sql
  • c1
  • mytmptable
  • 表

得分解答快速导航

  • 帖主:hyl_1978
  • kories

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo