论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> 应试技巧 >> IT正文
在VFP报表中实现每页打印指定记录数
 作者:佚名     2007-3-14 15:59:43        来源:不详  浏览次数:

  方法一
  
    在VFP的报表生成器中,编制报表,用调整报表页头带和页脚带高度的方法来控制每页要打印的记录数据,这是一种比较简单、容易实现的方法。但是由于不同的计算机中默认的纸张大小不一样,或者相同的纸型中的页边距设置不一样而使得每页打印的记录数发生改变。这对于固定的用户和固定的打印机、纸张来讲,没有什么问题,但如果软件要运行于多台电脑上或推广到更广泛的用户中,就要考虑不同的打印机及纸张的问题了。此时可以用下面介绍的方法二和方法三来实现。
  
    另外,有很多用户要求当表中的记录数不是整页数时在最后一页中以空的表格填满报表,也只有在下面的两种方法中才能实现。
  
    方法二
  
    以下过程中假设报表中使用的表名为 TEMP.DBF
  
    在报表设计器中:
  
    1、将报表中的打印字段前面的别名前缀全部删除。
  
    2、将报表数据环境中原来的表从数据环境中移去。
  
    3、在报表的数据环境的 Init 中放入以下代码:
  
    *-- DetailNum 是细节带中要打印的记录数,可在这里按需要进入修改
  
    local DetailNum
  
    DetailNum = 17
  
    *-- 以下 SQL语句消除删除记录对分组字段的影响及对数据进行适当的排序
  
    SELECT * FROM Temp INTO TABLE TMP1 WHERE NOT DELETED() &&&& order by 排序条件
  
    SELECT int((recno()-1)/DetailNum) as GroupCount, * ;
  
     FROM Tmp1 ;
  
     INTO CURSOR Temp2
  
    USE IN TMP1
  
    *-- 为保持一个干净的环境,删除刚刚建立的临时过渡表
  
    delete file TMP1.dbf
  
    if file("TMP1.fpt")
  
     delete file TMP1.fpt
  
    endif
  
    *-- 注:你可以在上面的代码中设置 DetailNum 的值为你所希望每页报表要打印的记录数。
  
    *-- 你也可以在第一句 SQL Select 中按你的需要设置 order by 子句来排序数据。
  
    4、在报表中增加一个分组并设置分组表达式为 GroupCount(即上面第二个 SQL Select 语句中的第一个字段名), 并选择每组从新的一页上开始复选框。
  
    5、运行你的报表。
  
    6、最后要说明的是:在运行报表前应设置正确的路径以便 VFP 可以找到报表所使用的表。
  
    方法三
  
    在该方法中,定义了一个全局变量tobePrint,该变量的值就是每页要打印的记录数,如果没有定义该变量,则使用默认的每页打印 15 条记录。
  
    1、temp.dbf添加到报表数据环境中。
  
    2、将temp.dbf的数据环境中的 BufferModeOverride 属性设置为 5。
  
    3、在数据环境属性Destroy 事件中写:
  
    =tablerevert(.t.)
  
    4、在数据环境属性Init 事件中写:
  
    if vartype(tobePrint) = "U" &&&& 如果全局变量还没有定义,在这里定义它的默认值为15
  
    Public tobePrint
  
    tobePrint = 15
  
    endif
  
    *-- 以下代码是为了当要打印的记录数不满一页时,打印空行来填满整个报表页
  
    do while reccount("temp") % tobePrint <> 0
  
    append blank
  
    enddo
  
    5、 在报表中新建两个报表变量如:nCount、nGroup,变量nCount的计算选项组中选择计数,在变量 nGroup 的要存储的值中写:
  
    iif(nCount<>0 and nCount % tobePrint=0,nGroup+1,nGroup)
  
    6、 在报表中增加一个分组并设置分组表达式为nGroup,并选择每组从新的一页上开始复选框。
  
    7、 用以下代码来运行报表:
  
    use temp
  
    *-- 为避免重复定义变量错误,在定义全局变量前首先释放它
  
    release tobeprint
  
    *-- 定义全局变量,该变量中保存了每页要打印的记录数
  
    public tobeprint
  
    *-- 设置每页打印10条记录
  
    tobeprint = 10
  
    *-- 打印我们的报表
  
    report form temp preview
  
    方法二与方法三的异同
  
    二者都是采用了数据分组的方法来实现“每页打印指定记录数”,向表中添加空记录来实现“表中的记录数不是整页数时在最后一页中以空的表格填满报表”。
  
    二者不同之处在于:方法二是利用临时表来解决问题,数据的分组信息写在临时表中,方法三是利用报表变量来解决分组问题,数据分组是用报表变量来实现的。
  
责任编辑:lss
  相关新闻
06年9月23日计算机等级考试二级VF官方标准试卷
06年9月计算机等级考试二级VF笔试试卷(Word版)
一段VFP错误处理代码
VFP与EXCEL的几种交互编程方法
用Word更好地输出VFP报表
VFP表转换成SQL Server表的方法
2006年9月计算机等级考试二级VF标准答案及解析
从笔试看二级VFP复习,基础教程网
专家谈如何准备二级VFP上机考试
VFP的数据库加密算法
从笔试看二级VFP复习,基础教程网
专家谈如何准备二级VFP上机考试
06年9月23日计算机等级考试二级VF官方标准试卷
06年9月计算机等级考试二级VF笔试试卷(Word版)
2006年9月计算机等级考试二级VF标准答案及解析
安裝amfphp
一段VFP错误处理代码
VFP与EXCEL的几种交互编程方法
用Word更好地输出VFP报表
VFP表转换成SQL Server表的方法
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号