王麗華
(黑龍江省海倫農(nóng)業(yè)機械化學(xué)校,黑龍江 海倫 152300)
在使用Visual FoxPro 6.0編程或?qū)W習(xí)過程中,經(jīng)常會出現(xiàn)或遇到這樣或那樣的問題,在不能解決的情況下,往往打擊了使用者的學(xué)習(xí)興趣,本文特將一些VFP使用技巧進行歸納總結(jié),與廣大VFP學(xué)習(xí)愛好者交流探討。
出現(xiàn)“Cannot Quit Visual FoxPro”的原因有兩種情況,一是在執(zhí)行了read event后,read event事件處于活動狀態(tài),此時,試圖使用系統(tǒng)窗口的關(guān)閉按鈕退出Visual FoxPro(或Visual FoxPro編寫的應(yīng)用,以下同),則會出現(xiàn)“Cannot Quit Visual FoxPro”。二是在 Visual Fox-Pro6.0中,如果在還有活動表單的情況下,無論使用系統(tǒng)窗口的關(guān)閉按鈕,還是調(diào)用Quit,都會出現(xiàn)“Cannot Quit Visual FoxPro”。這時,要正常退出,必須先關(guān)閉活動的表單。要避免出現(xiàn)“Cannot Quit Visual FoxPro”,在欲退出之前,要先執(zhí)行clear event。在Visual Fox-Pro5.0中還要先關(guān)閉活動的表單。
在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事件,關(guān)閉所有的表單,然后調(diào)用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根據(jù) 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”
打開記事本,貼入上面的內(nèi)容并保存為my.reg,然后雙擊這個文件導(dǎo)入到注冊表中。下面修改 exe讓它來讀取這個設(shè)置。
使用任何16進制編輯器 (例如:UltraEdit),在 exe中查找 VisualFoxProRuntime.9,找到后將其改為我們剛定義的 MyRuntime(注意修改后的串不要超過原串長度,若長度小于原串的話,注意尾部要填一個 00)
保存修改后的 exe文件,現(xiàn)在我們的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。現(xiàn)在這個 exe將加載 c:windowssystem32的運行庫 aaa.dll和 aaa.chs.dll。
由于誤操作,將自由表的備注文件刪除,致使自由表無法打開。遇到這種情況我們可采用下述方法解決:
創(chuàng)建一個新的自由表,且該自由表只含一個字段,其類型為備注型。關(guān)閉該自由表,將其擴展名為FPT的備注文件復(fù)制給誤刪除的自由表的備注文件,或?qū)⒃搨渥⑽募拿麨檎`刪除的自由表的備注文件即可。
運行下面的程序同樣也可以恢復(fù)丟失了的FPT文件:
accept′請輸入丟失了.FPT文件的自由表名稱(不帶擴展名):′to namef
namef=trim(namef)+′.bbb′
crea dbf&namef(aa m)
use
dele file&namef
用VFP低級文件函數(shù)創(chuàng)建一個空的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文件中的內(nèi)容已經(jīng)丟失,無法恢復(fù)。在實際操作中若遇到這種情況,最好是恢復(fù)原來的FPT文件,若原FPT文件無法恢復(fù)時再采用上述方法。
綜上所述,只是個人在使用VFP軟件過程中的一點學(xué)習(xí)心得,敬請VFP廣大愛好者學(xué)習(xí)者批評指正。
[1]林波.《數(shù)據(jù)庫應(yīng)用基礎(chǔ)Visual FoxPro 6.0》北京郵電大學(xué)出版社
[2]王晟 王松 劉強.《Visual FoxPro數(shù)據(jù)庫開發(fā)經(jīng)典案例解析》清華大學(xué)出版社
[3]李汝林.《中文Visual FoxPro 6.0實用教程》中職計算機技能緊缺人才培養(yǎng)規(guī)劃教材