王麗華
(黑龍江省海倫農業機械化學校,黑龍江 海倫 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實用教程》中職計算機技能緊缺人才培養規劃教材