VFP程序设计中应避免的几个问题

时间:2022-08-06 03:09:08

VFP程序设计中应避免的几个问题

摘要:Visual FoxPro是一个功能强大的数据库管理系统,它以其独到的特点和优势赢得了开发者的青睐。本文指出了Visual FoxPro程序设计中应避免的几个问题,并对此给出了具体的处理方法。

关键词:数据;控件;事件;程序

中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)05-10ppp-0c

1 引言

Visual FoxPro中文版是为数据库管理和应用程序开发而设计的功能强大的面向对象的环境。对于组织信息、查询、创建集成的关系型数据库系统与为最终用户编写功能全面的数据管理应用程序,Visual FoxPro可以提供管理数据需要的所有工具,它不仅支持客户/服务模式,而且具有与其他软件共享和交换数据的能力,提供了新的对象和事件处理模式,利用面向对象编程(OOP)的功能使用户能够方便、快捷地建立和修改应用程序,并与其他的数据库管理系统具有更快速、更有效、更灵活的特点。因此,利用Visual FoxPro中文版数据库管理系统(DBMS)来开发数据库系统软件,受到广大软件研制人员的青睐。但是,Visual FoxPro 不是一个十全十美的数据库开发平台,也有美中不足之处。特别是内容极其复杂,技术难点多,软件设计人员要熟练而合理地运用这一新的可视化开发工具,并不是一件容易的事情,往往在软件设计中要走不少弯路,对一些重要内容与技术要通过较多的软件研制实践才能培养起较强的实际应用能力,在实践中积累经验,常常会遇到程序代码正确、测试通过,但没有达到系统运行要求的模块。实质上Visual FoxPro程序设计中应该避免出现这些问题。下面提出几个在教学实践中积累起来的Visual FoxPro 程序设计中应避免的问题及其处理方法,供大家借鉴。

1 表单中控件制作次序不当,造成鼠标点击失效的问题

图1

Visual FoxPro中的控件对象是用户和程序交互的主要工具。通过在Visual FoxPro表单上移动、拖放和单击适当的控件,用户可以操作数据,并执行封装在控件对象中的方法代码程序。但是,在表单创建中,添加了合适的控件,在各自的控件中所选取的事件与其代码编写都正确,只是控件制作次序不同,在表单运行后会出现两种不同的现象:一种是达到了预期的教果,可在表单上移动、拖放和单击适当的控件,响应相应事件的代码,完成表单设计的任务;另一种出现鼠标移动、拖放和单击适当的控件后,没有任何反应,不执行封装在控件对象中的程序代码,只能通过Tab键或光标移动键来定位,进行用户数据操作,按回车键来完成“下一个”和“返回”控件操作。如图1所示的修改录入人员库中录入人员姓名表单,如果在创建如图1的表单时,先制作标签、文本框、命令按钮,再进行表单控件属性设置,编写过程代码,运行表单后,对表单上的控件操作运行正常,也就是可以用鼠标单击定位到控件Text3,进行录入人员姓名修改,单击“下一个”或“返回”按钮,来执行各自控件的相应事件的代码程序。在这一前提下,返回到表单编辑界面,给“录入人员姓名:”这一标签控件与Text3文本框添加一个形状控件组成一组,将其BackStyle属性设置为“0-透明”,SpecialEffect属性设置为“0-3维”。同样,给“下一个”与“返回”控件,添加一个形状控件组成一组,也将其BackStyle属性设置为“0-透明”,SpecialEffect属性设置为“0-3维”.这样,再运行表单后,“录入人员姓名:”右侧的文本框、“下一个”与“返回”命令按钮就不能用鼠标定位和单击来执行相应事件的代码程序,也即不能完成相应的操作,不能完成表单设计的任务。产生这种现象的原因在于控件制作次序不当。只要在创建表单时,将前面所述的两个形状控件先添加,并设置好属性,再在各自的形状框中制作好文本框与命令按钮,其余的属性设置、事件的代码程序与前述正常执行表单操作时一样。另外,有一点值得提醒的是添加好形状控件后,不能简单地将表单上已有的控件拖入形状框内,不然,运行表单后鼠标还是定位不到或不能操作这一控件。当然,有些控件不需要鼠标定位或对其进行操作,只是起到说明或显示数据的作用,可以添加相应控件,设置属性,编写程序代码,再来修饰表单界面,使得表单运行后操作达到理想的效果。例如图1表单中,可先添加标签“共有录入人员”和“当前是第”,文本框Textl和Text2,设置它们的属性,再添加形状框,并相应属性设置为“0-透明”与“0-3维”,运行表单后,不需要也不能用鼠标单击定位到文本框Text1和Text2,这也是表单设计中的一个应用技术。

2 事件选择不当,导致操作达不到预定目的的问题

图2

事件是某个特定时刻所发生的事情,它是引起对象从一种状态转换到另一种状态的现实世界中的事件的抽象。事件是瞬间完成的,设有特定时间,是引起对象状态转换的控制信息。在Visual FoxPro中,可以编写相应的代码对此事件进行响应。在多数情况下,事件是通过用户的交互操作产生的。如果在程序设计中,事件选择不当,会使程序运行达不到预定的目的。如图2,Text5的值来自Text1-Text4数值的运算,Text4数值的运算,Text5项为连动数据项,即在程序运行时Text1-Text4项中某一项值改变了,Text5项中显示值根据计算也立即发生相应的变化。Text1~Text4项中数据宽度根据实际情况进行了限制,如Text1项可输入数值最大为9999,为了程序运行时实现连动数据项数据实时显示,在Text1~Text4的文本框中失去焦点时执行过程代码,来得到Text5项的数值。如果把程序代码

V1=val(thisform.text1.value)*val(thisform.text2.value )

V1=v1+val(thisform.text3.value)*val(thisform.text4.value)

Thisform.text5.value=str(v1)

Thisform.refresh

放入Text1~Text4各自的InterActiveChange事件,结果出现这些文本框中输入数值只能输入一位数值,如Text1输入栏不能输入两位到四位的数值。而Text1文本框的InputMask属性值确实已设置为9999,产生这一现象的原因就是控件的事件选择有问题。如果将上述过程代码放入Text1~Text4各自的Valid事件,问题就不复存在。事实上,Valid事件在控件失去焦点发生,InteractiveChange事件在使用键盘或鼠标更改控件的值时发生,并且在每次交互地更改文本框中的值时,都要发生事件,即当用户在文本框中输入数字时,每单击一次都会引发Interactive Change事件。因此,在处理实际问题时,要根据具体情况,选取适当的事件时机,编写完成特定功能的程序代码。

3 隐含的数据不具备完整性问题

数据是计算机管理和操作的对象,设计程序就是用一系列指令存储数据并操作数据。Visual FoxPro使用户能够方便使用和管理数据,Visual FoxPro中的数据都有一定的数据类型,每一种数据类型决定了这一类型数据的取值方式和运算方式。数据的完整性是指数据的有效性、一致性和兼容性,用Visual FoxPro开发的程序必须保证管理和操作的数据具备完整性,程序设计人员需编写相应的代码或利用系统提供的功能实现数据的完整性约束条件及完整性检验。程序设计人员如果没有周全考虑到这一问题,尽管有些数据的处理在程序运行中没有表现出明显的错误,但由于存在着隐含的数据不具备完整性问题,影响了程序的严密性和软件的整体质量。如图3所示。

图3

程序要求输入起止日期,设计时就要考虑起止日期输入栏中输入的数据具备完整性,输入的数据不符合实际的,要求或允许用户重新输入。处理方法:

(1)要求Textl文本框输入栏输入的起始年份不小于2004,在Text2的GotFocus事件中编写过程代码为:

if val(thisform.text1.value)

messagebox(“请重新输入,年份必须不小于2004”,1+48+256,“出错信息”)

thisform.text1.value=“ ”

thisform.text1.setfocus

thisform.refresh

endif

(2)由于月份介于1-12,这样在Text3的GotFocus事件的过程代码为:

if val(thisform.text2.value)>12 or val(thisform.text2.value)

messagebox(“请重新输入月份1-12”,1+48+256,“出错信息”)

thisform.text2.value=“ ”

thisform.text2.setfocus

endif

对于text5的要求一样,只要在Text6的GotFocus事件编写相似的过程代码。

(3)对于Text3文本框输入栏输入的某一日,必须考虑到两点,一是介于1-31,二是某年某月是否有这一日,这一要求可在Text4的GotFocus事件的过程代码中编写为:

if val(thisform.text5.value)>31 or val(thisform.text5.value)

messagebox(“请重新输入日期”,1+48+256,“出错信息”)

thisform.text5.value=“ ”

thisform.text5.setfocus

endif

thisform.refresh

Text6的要求与Text3一样,可在“确定”按钮的GotFocus事件中编写相应的过程代码。另外,在这过程代码中考虑到起始日期要比终止日期早。否则有提示信息。要求用户重输入起止日期。

3.4 图3中文本框的初始值以字符型放在表单的Init事件中,Text1与Text4的InputMask属性设置为9999,其余文本框的InputMask属性设为99,所有文本框的Format属性设为x,按起始日期、终止日期输入的年、月、日、“确定”与“取消”命令按钮的顺序设置好Tab键次序。

4 结束语

Visual FoxPro程序设计中应避免的问题不仅仅只涉及到这些,处理方法也不唯一。本文的目的是Visual FoxPro程序设计人员在程序设计中积累经验,少走弯路,使程序运行正常。管理和操作的数据具有完整性。Visual FoxPro以及应用程序能发挥最佳性能.

参考文献:

[1]李雁翎.Visual Foxpm应用基础与面向对象程序设计教程[M].北京:高等教育出版社,2002.

[2]任明汉.编程中值得注意的几个问题[N].电脑报,2001.2:2-3.

[3]史济民,汤观全.Visual Foxpro及其应用系统开发[M].北京: 清华大学出版社,2002.

收稿日期:2007-12-27

上一篇:基于WebGIS的数字校园系统建设初探 下一篇:利用Homeshare实现无路由共享联网