王丽华
(黑龙江省海伦农业机械化学校,黑龙江 海伦 152300)
在使用Visual FoxPro 6.0编程或学习过程中,经常会出现或遇到这样或那样的问题,在不能解决的情况下,往往打击了使用者的学习兴趣,本文特将一些VFP使用技巧进行归纳总结,与广大VFP学习爱好者交流探讨。
出现“Cannot Quit Visual FoxPro”的原因有两种情况,一是在执行了read event后,read event事件处于活动状态,此时,试图使用系统窗口的关闭按钮退出Visual FoxPro(或Visual FoxPro编写的应用,以下同),则会出现“Cannot Quit Visual FoxPro”。二是在 Visual Fox-Pro6.0中,如果在还有活动表单的情况下,无论使用系统窗口的关闭按钮,还是调用Quit,都会出现“Cannot Quit Visual FoxPro”。这时,要正常退出,必须先关闭活动的表单。要避免出现“Cannot Quit Visual FoxPro”,在欲退出之前,要先执行clear event。在Visual Fox-Pro5.0中还要先关闭活动的表单。
在Visual FoxPro 6.0中,程序的开头可以加上类似以下的程序
ON SHUTDOWN DO MyQuit
PROC MyQuit
CLEAR Event
IF-SCREEN.cFormCount>0
DIME TmpForm[-SCREEN.FormCount]
FOR i=1 TO-SCREEN.FormCount
TmpForm[i]=-SCREEN.Forms(i)
ENDFOR
FOR i=1 TO-SCREEN.FormCount
TmpForm[i].Release
ENDFOR
ENDIF
QUIT
这样,在欲退出Visual FoxPro时,程序先自动清除read event事件,关闭所有的表单,然后调用Quit正常退出。
我们知道,编译成 exe的 VFP程序要加载两个运行时库,它们的缺省名称为 VFP9r.dll和 VFP9rchs.dll。VFP在正常情况下查找和加载这两个 dll的方式是这样的:
2.1 首先从注册表中(位置:HKEY_CLA SSES_ROOTVisualFoxProRuntime.9ShellOpe nCommand)读取运行库的文件路径和名称定义,通常是 C:Program FilesCommon FilesMi crosoft SharedVFPVFP9r.dll,然后加载它。
2.2 加载成功的 VFP9r.dll根据 Windows确定要使用的语言资源文件 VFP9r???.dll,对于简体中文,使用 VFP9rchs.dll
假定我们将这两个运行库文件更名为aaa.dll和 aaa.chs.dll,并放到 c:windowssystem32下的话,如何让我们的 exe仍能正常运行,又不影响其他 VFP程序正常运行呢?
首先,要使我们的 exe不使用 HKCRVi sualFoxProRuntime.9ShellOpenCommand 中的运行库缺省定义。先在注册表中增加一项我们要使用的运行库定义:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOTMyRuntimeShellOpenCommand]
@=“C:\WINDOWS\system32\aaa.dll”
打开记事本,贴入上面的内容并保存为my.reg,然后双击这个文件导入到注册表中。下面修改 exe让它来读取这个设置。
使用任何16进制编辑器 (例如:UltraEdit),在 exe中查找 VisualFoxProRuntime.9,找到后将其改为我们刚定义的 MyRuntime(注意修改后的串不要超过原串长度,若长度小于原串的话,注意尾部要填一个 00)
保存修改后的 exe文件,现在我们的exe运行时将加载这个 aaa.dll而不会再找VFP9r.dll了。
接下来我们要让 aaa.dll去找 aaa.chs.dll而不找原来的 VFP9rchs.dll,仍用16进制编辑器,这次打开 aaa.dll,查找 VisualFoxproRuntime.9Resources,看到紧接着的VFP9R%s了吗?就是它,将它改为 aaa.%s,由于我们的 aaa.%s比 VFP9r%s少一个字符,所以后面也要填一个 00。保存好修改后的aaa.dll。现在这个 exe将加载 c:windowssystem32的运行库 aaa.dll和 aaa.chs.dll。
由于误操作,将自由表的备注文件删除,致使自由表无法打开。遇到这种情况我们可采用下述方法解决:
创建一个新的自由表,且该自由表只含一个字段,其类型为备注型。关闭该自由表,将其扩展名为FPT的备注文件复制给误删除的自由表的备注文件,或将该备注文件改名为误删除的自由表的备注文件即可。
运行下面的程序同样也可以恢复丢失了的FPT文件:
accept′请输入丢失了.FPT文件的自由表名称(不带扩展名):′to namef
namef=trim(namef)+′.bbb′
crea dbf&namef(aa m)
use
dele file&namef
用VFP低级文件函数创建一个空的FPT文件,原自由表即可打开。程序清单如下:
accept′请输入丢失了.FPT文件的自由表名称(不带扩展名):′to namef
namef=trim(namef)+′.FPT′
hand=fcreate(namef)
abc=repl(chr(0),3)+chr(8)+repl(chr(0),3)+′@′+repl(chr(0),504)
=fwrite(hand,abc)
=fclose(hand)
return
上述方法只是为丢失了FPT文件的自由表建立了一个新的FPT文件,原FPT文件中的内容已经丢失,无法恢复。在实际操作中若遇到这种情况,最好是恢复原来的FPT文件,若原FPT文件无法恢复时再采用上述方法。
综上所述,只是个人在使用VFP软件过程中的一点学习心得,敬请VFP广大爱好者学习者批评指正。
[1]林波.《数据库应用基础Visual FoxPro 6.0》北京邮电大学出版社
[2]王晟 王松 刘强.《Visual FoxPro数据库开发经典案例解析》清华大学出版社
[3]李汝林.《中文Visual FoxPro 6.0实用教程》中职计算机技能紧缺人才培养规划教材