FOXPRO在三峡工程信息管理中的应用.doc
FOXPRO 在三峡工程信息管理中的应用 摘 要:三峡工程是世界级的巨型工程,专业门类多、技术复杂、信息管理工作量巨大,必须使用 MIS 系统对信息进行收集、整理、存储、统计、分析、制表。几年来,我们先后用 FOXBASE、 FOXPRO 编制了《工资管理系统》、《土石方工程量计算程序》、《工程支付管理系统》、《文档管理系统》、《混凝土强度统计分析程序》等小型桌面系统。在编程过程中,经历了从低级平台( DBASE)到高级平台 ( FOXPRO)、从字符界面( DOS)到图形用户界面( WINDOWS)的转化,从中总结出了一些应用经验。 关键词:三峡工程, FOXPRO,应用,经验 三峡工程是世界级的巨型工程,专业门类多、技术复杂、信息管理工作量巨大,必须使用 MIS 系统对信息进行收集、整理、存储、统计、分析、制表。目前,参建各单位的 MIS系统相继投入运行,如长江三峡工程开发公司的 TGPMIS系统、葛洲坝股份有限公司三峡建设承包公司的“施工档案管理系统”等。这些系统功能较强、涉及面较广,但不可能覆盖信息管理的方方面画,还需要桌面数据库系统来补充。由于桌面数据库的简单易学,因而有着巨大的用户群。用桌面数据库开发出功能较强的系统也有不少成功的先例,如 1995~ 1997 年 三峡工地使用的“统计系统”、国家电力公司开发的概预算软件等。 在桌面数据库方面,几年来,我们先后用 FOXBASE、 FOXPRO 编制了《工资管理系统》、《土石方工程量计算程序》、《工程支付管理系统》、《文档管理系统》、《混凝土强度统计分析程序》等小型桌面系统。在编程过程中,经历了从低级平台( 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 minimizemove 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 的应用系统开发前景广阔。