這是給初學者推薦壹種格式,不壹定最好,但它卻實能正常運行
* 程序名:main.prg
* 作用:整個系統的入口
* 路徑:\妳的程序目錄\prgs
Set Talk off
Set Escap off
* 開始,程序錯誤處理
ON ERROR DO Err.PRG With Error(), Message(), Message(1), Program(), Lineno(1)
* 第壹步,清理環境**********************
*******
Close All && 關閉所有工作區中打開的數據庫、表和索引,並選擇工作區 1。
Clear Menus && 從內存中釋放所有的內存變量和數組以及所有用戶自定義菜單欄、
&& 菜單和窗口的定義。 還從內存中刪除所有用 DECLARE-ALL 註冊
&& 的外部 Windows 32 位動態鏈接庫 (.DLLS)。
* 關閉系統菜單
* 如果在發出 SET SYSMENU SAVE 命令之後修改了菜單系統,可以通過發出
* SET SYSMENU TO DEFAULT 命令來恢復前面的設置。
Set Sysmenu Save
* 在程序執行期間廢止 Visual FoxPro 主菜單欄。
Set Sysmenu Off
Set Sysmenu To
* 第二步,設置環境
* 退出Read時保存數據緩沖區內容
Set Autosave On
* 使用 INSERT、APPEND 和 BROWSE 命令創建新記錄時,不將當前記錄數據復制到新記錄中。
Set Carry Off
* 指定是否可以用在文本框中鍵入最後壹個字符的方法退出文本框。
Set Confirm Off
* 日期不顯示世紀部分
Set Century Off
* 設置日期格式為"YY.MM.DD" 格式
Set Date Ansi
* 不顯示已經刪除的記錄
Set Delete On
* 決定能否使用 LOCK ( )或 RLOCK ( ) 鎖定多個記錄。
Set Multilocks On && 網絡編程專用
* 確定 ATLTER TABLE、CREATE TABLE 和 INSERT - SQL 命令如何處理 null 值。
Set Null On
* 指定當字段是空值(NUll)顯示的文本為
Set NullDisplay To ''
* 改寫已有文件之前不顯示對話框
Set Safety Off
* 移去圖形狀態欄。
Set Status Bar Off
* 第三步,設置妳的程序路徑
* 設置程序主目錄
Public gcMainPath
gcMainPath = Sys(5)+Sys(2003)+"\"
Set Default To &gcMainPath
* 數據目錄(本地數據庫和表)
Public gcDataPath
gcDataPath =gcMainPath+"Data\"
* 程序目錄
Public gcPrgsPath
gcPrgsPath =gcMainPath+"Prgs\"
* 圖片目錄
Public gcPicsPath
gcPicsPath=gcMainPath + "pics\"
* 表單目錄
Public gcFormsPath
gcFormsPath = gcMainPath+"forms\"
* 菜單目錄
Public gcMenusPath
gcMenusPath = gcMainPath+"menus\"
* 標簽目錄
Public gcLabelsPath
gcLabelsPath = gcMainPath+"labels\
* 報表目錄
Public gcReportsPath
gcReportsPath =gcMainPath+"Reports\"
* 第四步 初始化鍵盤
Capslock(.F.)
IMEStatus(0)
Insmode(.T.)
Numlock(.T.)
* 第五步 打開自定義類庫、過程文件
Set Classlib To gcMainPath+"vcx\MyVCX.vcx"
Set Procedure To gcPrgsPath +"Myproc.prg"
* 設置不顯示ODBC登錄對話框
SQLSETPROP(0,"DispLogin",3) && 網絡專用
* 第六步 聲明其他全局變量
* 數據源名稱
Public gcDSN
gcDSN = ‘’
* 用戶登錄名
Public gcUID
gcUID = ‘’
* 用戶登錄口令
Public gcPWD
gcPWD=‘’
* 當前登錄用戶姓名(中文)
PUBLIC gcName
gcName=''
* 前後端數據庫名
Public gcSQLDatabase,gcFoxDatabase
gcSQLDatabase = ‘資料管理’ && 後端 SQL 數據庫
gcFoxDatabase = ‘資料管理’ && 前端 VFP數據庫
* 連接句柄
Public gnHandleMaster &&與後端 master 系統數據庫的連接句柄
gnHandleMaster = 0
Public gnHandleUser && 與後端用戶數據庫“gcSQLDatabase ”的連接句柄
gnHandleUser = 0
* 第七步,檢查登錄帳號
>* 調用登錄表單"login.scx"
Do Form gcFormsPath+"login.scx" To gnHandleUser
結果如下圖所示
* 如果登錄成功 gnHandleUser > 0 表示登錄成功,反之,失敗
If gnHandleUser <= 0 && 登錄失敗
Quit && 退出
Endif
* 指定當試圖退出VFP時要執行的程序
ON SHUTDOWN DO gcPrgsPath +"FileExit.prg" && 代碼如下樓所示。
* 第八步,調用程序主菜單
Do gcMenusPath+"mainmenu.mpr"
* 第九步,顯示程序封面,桌面
Do Form gcFormsPath+"title.scx" && 封面
Do Form gcFormsPath+"Desktop.scx" && 桌面,也就是妳的程序背景(圖片略)
* 第十步 打開或創建本地數據庫
cFoxDb=gcDataPath+ gcFoxDatabase + ".dbc"
If Not Files(cFoxDb) && 如果指定的數據庫不存在
Create Database &cFoxDb && 創建它
Endif
* 啟動事件處理
Read Events
* 將釋放當前的 ON SHUTDOWN 命令
ON SHUTDOWN
* 程序:FileExit
* 作用:解決程序運行後,點擊主窗口關閉按鈕[X]不能退出VFP的問題
If Messagebox('您真要退出本系統嗎?',4+32+256,'退出確認')<>6 AND gnHandleUser > 0
Return
Endif
*Do While Txnlevel()>0
* Rollback
*Enddo
Clear Events
ON SHUTDOWN
* 恢復環境
Set Sysmenu To Default
With _Screen
.WindowState=2 &&最大化
.BackColor=Rgb(255,255,255)
.Caption="Microsoft Visual FoxPro"
.Icon =''
Endwith
* 關閉數據庫及表
If Used("cfg")
Use In cfg
Endif
If Used("dsn")
Use In dsn
Endif
If Used("uid")
Use In uid
Endif
Close Database All &&關閉所有數據庫
Close All &&關閉各種類型的文件,但不關閉命令窗口、調試窗口、幫助、跟蹤窗口。
Clear Menus &&釋放內存中所有的菜單定義。
Clear Popups &&釋放內存中所有用DEFINE POPUP命令創建的菜單定義。
Clear Windows &&釋放內存中所有用戶自定義窗口的定義,並從VFP主窗口或活動的用戶自定義窗口中清除窗口。
Clear &&清屏
Set Safe On
_Screen.Picture=""
=SQLDISCONNECT(0)
Quit
* 程序:錯誤處理,由梅子提供,未驗證。
*****************
err.prg
*****************
PARAMETER NERROR , CMESSAGE , CMESSAGE1 , CPROGRAM , NLINENO
SET TEXTMERGE DELIMITERS to
SET TEXTMERGE ON
SET TEXTMERGE TO ErrorLog.txt ADDITIVE NOSHOW
\---------------------------------------------------------------------
\<<DATE( )>> <<TIME( )>> 錯誤記錄
\程序標題: <<_Screen.Caption>>
\程序開發版本: <<VERSION(1)>>
DO CASE
CASE _SCREEN.WINDOWSTATE = 0
\窗口狀態: 普通
CASE _SCREEN.WINDOWSTATE = 1
\窗口狀態: 最小化
CASE _SCREEN.WINDOWSTATE = 2
\窗口狀態: 最大化
ENDCASE
\窗口可視: <<IIF(_Screen.Visible= .T. , "可見" , "不可見")>>
\窗口集合數: <<_Screen.FormCount>>
\網絡機器信息: <<SYS(0)>>
\執行程序: <<JUSTFNAME(SYS(16,1))>>
\執行程序所在目錄: <<JUSTPATH(SYS(16,1))>>
\執行程序所在目錄磁盤空間: <<DISKSPACE(JUSTDRIVE(SYS(16,1)))>>
\默認目錄: <<SYS(5)>><<SYS(2003)>>
\默認目錄磁盤空間: <<DISKSPACE(SYS(5))>>
\文件搜尋路徑: <<SET("PATH")>>
\系統臨時目錄: <<SYS(2023)>>
\虛擬內存池大小: <<SYS(1001)>>
\正在使用的工作區: <<Alias()>>
\活動字段: <<VARREAD()>>
IF TYPE('_Screen.ActiveForm.Name') = 'C'
\活動表單: <<_Screen.ActiveForm.Name>>
\表單標題: <<_Screen.ActiveForm.Caption>>
\表單基類: <<_Screen.ActiveForm.BaseClass>>
\表單派生: <<_Screen.ActiveForm.Class>>
\表單派生庫: <<_Screen.ActiveForm.ClassLibrary>>
\表單位置: <<SYS(1271, _Screen.ActiveForm)>>
ELSE
\無活動表單
ENDIF
IF TYPE('_Screen.ActiveForm.ActiveControl') = 'O'
\活動控制: <<_Screen.ActiveForm.ActiveControl.Name>>
IF TYPE('_Screen.ActiveForm.ActiveControl.Caption') = 'C'
\控制標題: <<_Screen.ActiveForm.ActiveControl.Caption>>
ENDIF
\控件基類: <<_Screen.ActiveForm.ActiveControl.BaseClass>>
\控件派生: <<_Screen.ActiveForm.ActiveControl.Class>>
\控件派生庫: <<_Screen.ActiveForm.ActiveControl.ClassLibrary>>
\控件位置: <<SYS(1271, _Screen.ActiveForm.ActiveControl)>>
ELSE
\無活動控制
ENDIF
\錯誤代號: <<nError>>
\錯誤信息: <<cMessage>>
\產生錯誤的位置: <<cProgram>>
\所在行號: <<nLineno>>
\產生錯誤的代碼: <<cMessage1>>
\輸出內存使用情況 -> MemoryLog.txt
\輸出工作環境到 -> StatusLog.txt
SET SAFETY OFF
DISPLAY MEMORY TO File MemoryLog.txt NOCONSOLE
DISPLAY STATUS TO File StatusLog.txt NOCONSOLE
\---------------------------------------------------------------------
SET TEXTMERGE TO
Nvalue = ;
MESSAGEBOX('程序發生錯誤!詳細信息如下:' + CHR(13) + CHR(13) + '錯誤代號: ' + ;
LTRIM(STR(NERROR)) + ;
CHR(13) + ;
'錯誤行號: ' + ;
LTRIM(STR(NLINENO)) + ;
CHR(13) + ;
'錯誤信息: ' + ;
CMESSAGE + ;
CHR(13) + ;
'錯誤代碼: ' + ;
CMESSAGE1 + ;
CHR(13) + ;
'錯誤位置: ' + ;
CPROGRAM + ;
CHR(13) + ;
CHR(13) + ;
'該錯誤已經記錄到文件:Errorlog.txt,Memorylog.txt,Statuslog.txt。',50,'信息')
DO CASE
CASE Nvalue = 3
QUIT
CASE Nvalue = 4
RETRY
CASE Nvalue = 5
RETURN
ENDCASE