FOXPRO在三峡工程信息管理中的应用
摘 要:三峡工程是世界级的巨型工程,专业门类多、技术复杂、信息管理工作量巨大,必须使用mis系统对信息进行收集、整理、存储、统计、分析、制表。几年来,我们先后用foxbase、foxpro编制了《工资管理系统》、《土石方工程量计算程序》、《工程支付管理系统》、《文档管理系统》、《混凝土强度统计分析程序》等小型桌面系统。在编程过程中,经历了从低级平台(dbase)到高级平台 (foxpro)、从字符界面(dos)到图形用户界面(windows)的转化,从中总结出了一些应用经验。
关键词:三峡工程,foxpro,应用,经验
三峡工程是世界级的巨型工程,专业门类多、技术复杂、信息管理工作量巨大,必须使用mis系统对信息进行收集、整理、存储、统计、分析、制表。目前,参建各单位的mis系统相继投入运行,如长江三峡工程开发公司的tgpmis系统、葛洲坝股份有限公司三峡建设承包公司的“施工档案管理系统”等。这些系统功能较强、涉及面较广,但不可能覆盖信息管理的方方面画,还需要桌面数据库系统来补充。由于桌面数据库的简单易学,因而有着巨大的用户群。用桌面数据库开发出功能较强的系统也有不少成功的先例,如1995~1997年三峡工地使用的“统计系统”、国家电力公司开发的概预算软件等。
在桌面数据库方面,几年来,我们先后用foxbase、foxpro编制了《工资管理系统》、《土石方工程量计算程序》、《工程支付管理系统》、《文档管理系统》、《混凝土强度统计分析程序》等小型桌面系统。wWw.11665.Com在编程过程中,经历了从低级平台(dbase)到高级平台(foxpro)、从字符界面(dos)到图形用户界面(windows)的转化,从中总结出了一些应用经验。如:在windows中继续使用“字符型报表”、充分利用browse快速制作录入界面、利用“表达式生成器”建立查询、利用foxgraph建立直观的柱状图、饼图等等。
1 项目管理器
项目管理器引入项目概念后,使开发人员从应用系统中各类文件繁琐的管理中解脱出来,从而有更多的时间用于模块开发:项目管理器有如下优点:(1)只要将应用系统的主控模块(通常是菜单)放入项目管理器中,在生成项目时,能将应用系统中几乎所有的文件都纳入其中,方便程序模块的修改、调试;(2)通过其可以方便地创建可执行文件,并且在编译时具有自动更新项目中各组成部分的版本的功能。
在使用项目管理器时应注意:(1)尽可能地使用“原”文件(mnx、scx等),而不使用由生成器转换以后的程序文件(mpr、spr等),以便在菜单、屏幕等更新后,执行项目管理器中的“build”按钮时能自动作相应的转换;在程序中调用菜单或屏幕时,调用扩展名为mpx或spx的文件而不是扩展名为mpr或spr的文件。(2)若一个应用中的大部分模块都已定型,只是个别模块在使用中变化。如我们编制的《工资管理系统》中的统计模块,该模块的修改(二次开发)较简单,系统的使用人员也可以胜任。这要求在编译的可执行文件中不含该模块,实现的方法是:利用foxpro“project”菜单中的“exclude”菜单条对项目管理器中的该模块作标记,然后执行“project”菜单中的“pack”功能,再重新编译项目即可。外部模块是fxp类型的文件,在安装时,注意将外部模块文件放在应用系统exe文件所在的目录中。
2 foxpro程序的龙头——菜单
程序通常由多个功能模块组成,可以通过屏幕中排列的一系列按钮等对象来调用这些模块,但通常用菜单将各功能模块融合在一起形成整体。为此,我们用delphi编制了这种菜单的自动生成器。
foxpro中提供了与windows图形用户界面一致的条形菜单、弹出菜单,并提供了相应的自动生成工具(genmenu.fxp)。这种菜单的特点是:菜单容许是多层次的;运行时菜单可以动态变化;功能模块可以直接含在菜单中,使得由一个菜单程序构成一个应用系统成为可能;可以直接使用一些通用功能,如新建文件、复制、粘贴等。这种形式的菜单,初次使用时往往会产生只运行一次就退出菜单的情况,可以用以下的办法解决:
(1)在菜单开始(setup)代码最后加入如图1所示循环起始语句:
do while.t.
(2)菜单的清楚(cleanup)代码如下所示:
read valid.f.
enddo
(3)退出菜单程序的代码如下所示:
close database
clear all
set sysmenu to default
cancel
应用系统中常常要用应用的名称代替foxprow主窗口中的标题“microsoft foxprow”,实现方法是在菜单开始(setup)代码的前面加入类似如下所示代码:
modify window screen at 4,6 size 36,147;
title“物资材料管理程序”
font“ms sans serif”,8 float close minimize
move window screen center
zoom window screen max
foxbase的下拉菜单(meun bar.……read menu to)是一种单任务性质的,在执行一个具体的模块时,菜单隐去,控制权在所执行的模块,不会发生模块的重复执行。而foxpro的条形菜单具有多任务的性质,同一模块,可重复执行,有时需要利用这一功能,但多数情况下是不需要的,这是因为同一模块或同时活动的多个模块经常处理的是同一类数据库或表,这样可能会因产生冲突而出错。因此,通常要求在执行一个模块时,不容许使用相同数据库文件的其他模块执行。这可以通过在菜单开始(setup)代码引入若干逻辑型内存变量,在菜单条中使用skip属性来实现。通过这种方式,可以使模块之间产生关联。
3 应用程序的信息输入
(1)屏幕生成器
屏幕和菜单类似,都有开始 (setup)、清除(cleanup)两个代码段,通过他们可以设置相应的环境或在屏幕(或菜单)退出时恢复环境。虽可以通过屏幕生成器中的 “environ-mext”按钮中的“save”功能保存开发时的环境,但此功能有限,不便于进行复杂的设置,且其保存的开发时的环境可能与运行时不同,导致程序运行时出错。所以,建议编程人员不要用此功能,而使用前者。
屏幕中编写代码时,有两个层次,即屏幕层和屏幕中的对象层。通常的处理均可在对象层次中解决。屏幕层次中通常只使用开始(setup)、清除(cleanup)两个代码段,其他的代码段通常在多窗体、多屏幕中用到。在对象层次中,通常也只需要编写“valid”代码。
(2)功能强大的browse
使用过excel的人都习惯对纵横表进行操作,这样操作直观、自然。在foxprow中,用browse可以实现类似的功能。若要用browse对表进行任意操作,用下面简单的命令即可:
use
>browse title
这样的操作,表中的数据是不安全的,有必要对表的浏览操作加以限制。如在browse命令中有选择性的加入node-lete、noappend、nomodify,就可以对“加删除标志”或“追加记录”或“修改记录”加以限制。
borwse titile nodelete noappend nomodity
(注:这条命令只能显示表的内容,不容许对表进行修改)
有时,表的字段名是西文字段名,或虽是中文字段,但表达的意思不易理解时,在浏览时需要给出易于识别的表头,这时就需要使用“:h=”的字段名修饰如下所示:
browse field name:h=“姓名”
(注:这里name是西文字段名,在显示时用“姓名”替换)
在browse命令中加入nomodify将锁定所有的字段,不容许修改。但通常的情况只要求锁定关键字段、关联字段,这时就不能用nomodify,而要用“:w=.f.”字段名修饰功能。如下所示:
browse field name:h=“姓名”:w=.f.,
basic:h=“basic成绩”
(注:name字段不让修改
browse的功能非常强大,读者可参看browse的帮助提示。灵活应用browse的子句以及一些修饰功能,可以实现极其强大的数据库的录入、编辑、修改功能。
4 应用程序的检索的实现
(1)按例关系查询
在开发环境或命令环境中,进行查询采用功能强大的rqbe是最优的选择,用他建立单表或多表查询均比较简单,介绍这方面内容的资料较多,在此,限于篇幅,不再赘述。由于在运行库中未集成rqbe特性,在开发应用时,请不要包含该特性。但用rqbe功能生成的sql语句可用于应用系统中,减少编制查询模块占用的时间。将sql语句中的字句的内容设置成变量,用“宏替换”功能可以构成某种程度上的通用查询模块。
(2)表达式生成器
在运行时能用表达式生成器(调用方法是getexpr to)生成过滤条件,将查询的记录过滤出来,在浏览窗口或报表中显示输出。
(3)定制查询屏幕
按例关系查询以及表达式生成器均需要用户有一定的foxpro运用基础。对于普通用户,需要构造出傻瓜是样的查询屏幕,用户填几个字符串或数值等,就可以找出相应的记录。
5 应用程序的结果输出
(1)browse
browse功能强大,即既可用于信息的录入,又可作为信息输出的载体。
(2)报表
foxpro的报表与foxbase中的报表相比增加了表格线的功能,更符合中文报表的习惯,制作报表较方便。但报表中的对象的定位稍显麻烦,编制—个报表所花的时间较多,并且,所定制的报表是相刘于某种大小的纸张的,纸张大小改变后不能自适应。
在foxbase以及在dos下的foxpro中,要打印报表,通常是用“@.……say.……”语句编制程序实现,所生成的报表为文字型的报表。这种报表可以直接送往打印机输出,也可以存入一文本文件中,经其他字处理程序处理后输出。在早期,编制程序生成报表是非常麻烦的,系统开发中,大量的时间是用来编制报表程序。为了加快报表程序的编制,我们在实践中用delphi编制了自动生字符报表程序的工具。这些工具中,既有简单报表的快速生成接口,也有生成复杂纵横表头报表程序的工具。
由于cced2000使得在windows图形用户界面输出字符型的报表非常方便,并且用我们自己的工具生成文字制表符型的报表的速度要比foxpro生成的图形报表的速度快得多,所以即便是现在,我们大量的报表仍采用的是字符型的报表。若文字报表已存入文件autoprn.prn中,用cced2000打开文字报表的方法如下所示:
filename=sys(5)+sys(2003)+“\autoprn.prn”
run c:\cced2000\cced2000 & filename
(3)图表
在foxprow中,可以直接从数据库中提取数据生成柱状图、饼图等图表。方法是用copy命令将图表中要用到的字段复制到一个临时数据库中,然后调用 foxgraph向导即可。例如数据库abc.dbf中含有“月份”、“产值”等10个字段,要求用“月份”、“产值”字段的值生成一柱状图。完成要求所需的代码如下所示:
use abc
copy to temp.dbf field 月份,产值
use temp
do(-foxgraph)
(4)用excel生成报表
excel可以直接打开foxprow2.5b的数据库进行后处理。要在foxpro中能调用excel,要求在dos的path路径中有excel的搜索路径。例如用excel打开数据库abc.dbf(要求在foxpro中,先关闭该数据库)的代码如下:
filename=sys(5)+sys(2003)+“\abc.dbf”
run excel & filename
6 结语
为了加快应用系统的开发,我们自编了几个自动生成工具,使得开发一个应用的时间从原来的几个月的时间缩短半个月~1个月,开发效率成倍提高。桌面数据库仍有着广泛的市场,foxpro的应用系统开发前景广阔