Database 版 (精华区)

发信人: mengy (LEAR DLLS 命令时,将从内存中清除), 信区: Database
标  题: 实现FOXPRO动态制表的新思路
发信站: 哈工大紫丁香 (2000年12月06日20:09:24 星期三), 站内信件

实现FOXPRO动态制表的新思路

韦 明
山东省潍坊市 昌潍师范专科学校数学系 邮编:261043




【摘 要】 本文在分析Foxpro报表数据库结构的基础上,通过修改Foxpro报表信息
库的内容,实现了Foxpro报表的自动生成。

【关键词】 报表,动态报表,Foxpro

1、引言

FOXPRO数据库为用户提供了功能强大的“报表设计器”(Report builder),利用“
报表设计器”的可视功能,可以方便灵活地制作几乎任意形式的报表,并且可以控
制报表的输出、定义报表的页面等。但是这样制作的报表是一个静态的报表,一旦
数据库的结构发生变化必须重新修改。而且,每段程序只能适合特定的数据库,有
多少报表就要编制多少个报表程序,不但增加了工作量,而且缺乏通用性和灵活性
,也不利于程序的维护与扩充。

那么,我们是否可以在充分利用FOXPRO“报表设计器”的强大控制功能的前提下,
设计出通用的动态报表呢?为此,本文进行了较深入的研究,答案是肯定的。



2、报表的构成

一般情况下报表包含表头、表体和表尾三部分:

·表头:在每页的顶端,显示报表的标题及其它提示信息等;

·表体:包含报表的主体,是报表的关键部分,一般有循环数据项构成;

·表尾:出现在每页的底端,显示总结、总计、日期等文本信息等。

3、报表信息库的结构

我们知道在FOXPRO中,报表的信息是保存在以. FRX为扩展名的数据库文件中(备
注文件以. FRT为扩展名),了解报表数据库的结构有助于问题的解决。报表库(.
FRX)的库结构及字段含义如下表所示:

字段名称

类型

长度

小数

说明

1 PLATFORM 

C

8

操作平台(_DOS或_WINDOWS)

2 UNIQUEID

C

10

唯一标识(当NAME合EXPR都为空时以_RHE开头, 否则以_RNR开头)

3 TIMESTAMP

N

10

时间标签(先后次序)

4 OBJTYPE

N

2

目标类型(1.环境; 2.数据库; 5.文字; 8.变量; 9.TIMESTAMP为空; 23.
TIMESTAMP为空) 

5 OBJCODE

N

3

目标代码(1.;4.;7.;53)

6 NAME

M

10

名称(数据库名称)

7 EXPR

M

10

表达式

8 VPOS

N

9

3

行座标

9 HPOS

N

9

3

列座标

10 HEIGHT

N

9

3

高度

11 WIDTH

N

9

3

宽度

12 STYLE

M

10

风格(透明,不透明)

13 PICTURE

M

10

格式或OLE文件名称

14 ORDER

M

10

索引排序

15 UNIQUE

L

1

唯一数据库(.F.,.T.,空)

16 COMMENT

M

10

注释

17 ENVIRON

L

1

是否报表运行环境(.T.时)

18 BOXCHAR

C

1

画框字符

19 FILLCHAR

C

1

表达式类型(C,N,D等,文字型的为空)

20 TAG

M

10

(当该记录为记录环境的记录时,该字段储存打印信息等;记录数据库时,储存数据库
名称)

21 TAG2

M

10

当该记录为记录环境的记录时,该字段储存打印控制等

22 PENRED

N

5

前景红

23 PENGREEN

N

5

前景绿

24 PENBLUE

N

5

前景蓝

25 FILLRED

N

5

填充红

26 FILLGREEN

N

5

填充绿

27 FILLBLUE

N

5

填充蓝

28 PENSIZE

N

5

划线宽度

29 PENPAT

N

5

指定填充图案(0.空;1.实体;2.水平;3.垂线;4.左斜;5右斜;6.交叉;7.斜交叉)

30 FILLPAT

N

5

划线类型(0.无;1.点;2.虚线;3. 虚线-点;4. 虚线-点-点)

31 FONTFACE

M

10

字体类型

32 FONTSTYLE

N

3

字体风格

33 FONTSIZE

N

3

字体大小

34 MODE

N

3

模式

35 RULER

N

1

标尺(2-默认值,3-象素)

36 RULERLINES



1

标线宽度

37 GRID

L

1

是否显示网格线

38 GRIDV

N

2

垂直网格线刻度

39 GRIDH

N

2

水平网格线刻度

40 FLOAT

L

1

浮动

41 STRETCH

L

1

溢出时伸展

42 STRETCHTOP

L

1

相对于顶端伸展

43 TOP

L

1

相对于顶端固定

44 BOTTOM

L

1

相对于底端固定

45 SUPTYPE

N

1

控制类型

46 SUPREST

N

1

控制设置

47 NOREPEAT

L

1

每页都打印页标题

48 RESETRPT

N

2

重置报表

49 PAGEBREAK

L

1

每组从新的一页开始

50 COLBREAK

L

1

从新的一列开始

51 RESETPAGE

L

1

每组页号重新从1开始

52 GENERAL

N

3

通用

53 SPACING

N

3

空格

54 DOUBLE

L

1

是否加倍

55 SWAPHEADER

L

1

头互换

56 SWAPFOOTER

L

1

脚注互换

57 EJECTBEFOR

L

1

打印前走纸

58 EJECTAFTER

L

1

打印后走纸

59 PLAIN

L

1

指定只在报表开始位置出现页标题

60 SUMMARY

L

1

是否仅打印总计和分类总计信息

61 ADDALIAS

L

1

是否增加别名

62 OFFSET

N

3

偏移(0-左;1-右;2-居中)

63 TOPMARGIN

N

3

上边界高度

64 BOTMARGIN

N

3

下边界高度

65 TOTALTYPE

N

2

计算类型

66 RESETTOTAL

N

2

重置(1-表尾,2-页尾)

67 RESOID

N

3

源标识

68 CURPOS

L

1

是否显示当前位置

69 SUPALWAYS

L

1

是否打印重复值

70 SUPOVFLOW

L

1

当细节区数据溢出时到新页或新列打印

71 SUPRPCOL

N

1

当此列改变时打印

72 SUPGROUP

N

2

当此组改变时打印

73 SUPVALCHNG

L

1

若空行则删除

74 SUPEXPR

M

10

是否打印控制条件

4、常用控制对象的特征

报表数据库的字段objtype(对象类型)和objcode(对象代码)的值确定了控制对象的
类型。为节省篇幅仅把最常用制表控制对象(文字,直线,表达式等)的特征值列入下
表:

Objtype 

Objcode

Offset

含义

5

0

文字

8

0

表达式

6

0

1

直线(水平线)

6

0

0

直线(垂直线)

7

4

矩形框(0~99椭圆)

用于报表布局的控制的特征值列入下表:

Objtype 

Objcode

含义

9

0

页头高度

9

1

页细节高度

9

3

组标头高度

9

4

组细节高度

9

5

组脚注高度

9

7

页脚注高度

其他常用到的字段有:①水平坐标(Hpos);②宽度(Width);③表达式类型
(Fillchar);④字体(Fontface); ⑤对齐方式(Offset)。

5、动态报表的实现

从数据库中自动读取字段名、类型、宽度,通过修改报表库(.FRX)的内容达到动
态制表的目的,其算法设计如下:

① 栏目宽度:取栏目标题与表达式宽度的最大者,Wi=MAX(Li,Hi), 其中Wi,
Li,Hi分别表示栏目宽度、标题宽度、表达式宽度;

②总宽度:Width =

不同的设计人员所采取的方法步骤可能不同,我们仅给出一种设计的思路:

① 使用快速报表制作一个简易模板,打开其报表结构库,内容如下图所示。

 

 

② 分别把“布局部分”、“主体部分”和“环境部分”复制到三个数据表中;

③ 从欲打印的数据表中自动读取字段名、类型、宽度,根据以上提供的算法修改
“主体部分”数据表的相应的字段内容;

④ 使用APPEND FROM 命令重新把“布局部分”、“主体部分”和“环境部分”三
个数据表连接到一个新的数据表中,该新表为欲打印的数据表的报表数据库;

⑤ 使用报表命令,实现的报表控制输出:予览、打印及送入文件。

6、结束语 

本文在分析研究FOXPRO报表数据库的基础上,实现了管理信息系统中的通用动态制
表问题。利用系统的强大功能,加以扩充生成新功能的设计有助于软件的维护和标
准化,利用类似的方法可以实现动态屏幕布局等,该问题将另文介绍。

由于缺少这方面的资料,不当之处望批评指正。

--

       大海无边天做岸
               山登绝顶我为风

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.227.121]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.555毫秒