开发一个系统,并不是一帆风顺的事,或多或少都要犯这样或那样的错误。在本系统的整个开发环境中鲜明有许多环节是经过反复实验、多次更改才最终定型。可以说遇到的问题很多,但总的来说应归纳为以下几个比较有代表的问题:
(1)在系统表单的测试中经常会遇到加载错误。例如,在数据环境中没有添加工作区的表,将会出现提示“当前工作区没有打开的表”。对于VFP的初学者或在设计的初级阶段,由于疏忽经常在数据环境中加入表单使用的表,这时只要在表单中加入数据环境即可消除错误。
(2)在程序运行中,有时会出现以下两种错误信息:
“表正在使用”、“表必须以独占方式打开”。因为表一般都是以独占的方式打开的,当一个表并没有关闭,而另一个命令又要调用此表,就会发生错误,如果系统提示“表正在使用”,说明在引用表之前,未关闭此表。如果是第二种情况,说明还有其它的表正在打开。总的来说,如果在打开表之前先关闭它所用的表,还有另一种解决的方法就是在程序中使用临时表,因为临时表在程序释放后会自动关闭。
(1) 当程序运行出错时,单击“忽略”或“挂起”后,程序执行被终止。但界面仍留在屏幕上,即使使用CLEAR命令也不能清屏,打开跟踪窗口后可以看出,程序运行并未结束,而被挂起了,要想结束程序,应在跟踪窗口中选择取消,回到主屏幕后发现界面已被清除。
(2) 在程序设计中,经常要用到字符串的比较,有时两个字符串内容相同,但程序却认为不同,造成判断的错误,其实仔细的看就会发现,原来是其中一个多了空格,为了消除这个错误可用ALLTRIM()函数来删除字符串两端的空格。
5.2 程序编制的一些技巧
在整个应用系统的设计制作中出现问题是在所难免的。通常,要实现一种功能有许多途径,其中有简捷的、巧妙的,也有烦琐的、复杂的,尤其是当第一次使用VFP编写应用系统,出现疑难问题在所难免的,下面就列举一些在编程过程中遇到的问题及其解决的方法。
1.在报表中如何制作表格
(1) 在报表中制作表格,若自己制作,将会很麻烦,需要画矩形及线条,并且要占满整个细节区。
(2) 考虑到上面的原由,采用了首先用向导制作,再手动修改的方法,这样做就简单多了。
2.如何实现按指定执行一个表单
如何实现按下指定键后执行一个表单,不按则执行另一个表单。过程如下:
在开始界面的制作中,就用到了这一点。要实现这一功能,其实只需要在表单的KEYPRESS事件中编程即可,而不能应用命令ON KEY LABEL,ON KEY LABEL 命令虽然也能实现按一下键时执行一条命令,并将此键值存入缓冲区,但可以用ON KEY 命令将键值还原成原来的值,虽然如此,但由于还要在TIMER控件的TIMER中编程来调用另一个表单,所以,这样就会在表单释放后同时调用出两个表单。
在表单的KEYRESS 事件中编程就不会出现这种情况,在KEYPRESS事件中编程不会出现这种情况,因为在KEYPRESS事件中同时可编程使表单释放,但上一种方法就不能这样作。具体的代码在表单的设计中已进行了说明,在此就不再述了。
3.如何使对主菜单进行修改后生效
在对主菜单进行后,发现用DO运行后的结果仍未改变。
在创建主菜单特别是编写菜单的跳过项时,需要反复调试、运行。但当用DO主菜单.mpr命令运行菜单时发现并没有什么改变。起初还认为该跳过项的设置不合法,但后来发现:即使是系统出了毛病,后经反复调试才发现当对菜单进行了修改之后,用DO命令执行的内容MAINMENU.MPR并未改变,.MPR文件经过生成才会发生改变。
具体生成方法如下:
第一种方法:使用项目管理器右侧的运行按钮,在运行的同时就生成.MPR文件。
第二种方法:
(1) 在项目管理器中选择主菜单项单右侧的修改按钮。
(2) 在系统主菜单里选择“菜单”项中的生成项。
(3) 系统弹出“生成菜单”对话框。
(4) 单击“产生”按钮,即产生输出文件。
5.3 程序的调试
从某种意义上来说,调试程序比编写程序更难。对某些函数、命令理解不深:在编写过程中疏忽大意等都会造成在调试中出现问题。创建了应用程序的各个组建后,希望他们能正常工作,但在编译运行程序时或多或少都有这样或那样的错误
编程中常出现的错误有三类:逻辑错误、语法错误和例外错误。
(1) 记书写表达式中的等号与其它运算符。
(2) 正确的拼写命令或函数名。
(3) 字符串两边的引号不配对,常见错误是在字符串中使用了与区分字符串界限的引号相同的引号。在VFP中,单引号、双引号是字符串的一种定界符。如果需要在字符串的内使用以上任何一种字符,则定界符应使用不同的字符。
(4) 复杂表达式中的括号配对。
(5)case…endcase,do…enddo,for…endfor,if…endif等不配对,于是就要用到VFP提供工具进行调试。选择使用那些调试工具取决于VFP的当前操作环境,调试窗口和跟踪窗口在开发环境和运行环境都可用,而命令窗口只在开发环境中可用。总地说来在调试程序时可用到以下几种方法:
1. 在命令窗口中直接输入测试
命令窗口允许开发者在开发环境中对单独的代码进行高度,在命令窗口中键入命令后,可查看到可视结果,立即看到结果:(使用?,??,???命令)返回一个值,如果一个命令没有可视结果,可组合使用命令窗口和调试窗口来查看程序执行的结果。例如编写KEYPESS事件中用键的ASCII码值,用命令窗口可以很容易判断出键的ASCII码值,在命令窗口输入?ASC(‘A’)后,按回车键,在屏幕上显示上显示结果97。
2. 动态显示值
当测试和调试单个命令和用户自定义的代码时,可能需要知道某些变量和函数的值。但由于命令窗口只能在开发环境中使用,所以如果要在开发环境或运行环境中查看动态值可使用跟踪窗口和查看窗口,而在监视窗口里能观察到代码表达式及他们的当前值,并能够在表达式上设置断点。
3. 跟踪程序和表单
程序在执行时是非常快的,要测试中间结果比较难,这时就可用跟踪窗口来观察到这些代码的执行。通过跟踪窗口可调节程序和方法的执行的速度,一步一步地执行命令,跳过已检查的代码并设置断点,可以控制用户自定义代码的执行速度,也可跟踪表单,设置事件代码断点。跟踪窗口和调试窗口
下面是介绍CODE表单的测试过程:
(1)在菜单“工具”中选择“调试”命令。弹出VFP调试器。
(2)单击调试器中的运行按钮,弹出运行对话框,选择运行文件CODE.SCX,单击确定按钮,并闭对话框,此时CODE表单的INIT事件的代码出现在跟踪窗口。
(3)在监视窗口的监视广西框中输入监视点的名称,然后按回车键,监视点即进入下面的监视窗口,在监视窗口输入以下三个监视点:
THISFORM .OLDCODE.VALUE
THISFORM.NEWCODE.VALUE
THISFORM.QUEREN.VALUE
(4)单击工具栏单步运行按钮,在监视窗口观察监视点的值,如果监视点没有值,监视点的值不能计算的表达式。
如果程序代码很长,而且大部分操作都不需要监视,可以在需要观察的代码处设置断点。当程序运行到断点处时,程序暂停在断点处,如果想恢复执行按