1. VFP資料庫中所有的命令及文件擴展名是什麼
VFP原程序文件擴展名為prg
VFP用到的其它文件的擴展名如下所示:
.act 向導操作圖的文檔
.app 生成的應用程序或 Active Document
.cdx 復合索引
.chm 編譯的HTML Help
.dbc 資料庫
.dbf 表
.dbg 調試器配置
.dct 資料庫備注
.dcx 資料庫索引
.dep 相關文件(由「安裝向導」創建)
.dll Windows動態鏈接庫
.err 編譯錯誤
.esl Visual FoxPro支持的庫
.exe 可執行程序
.fky 宏
.frx 報表
.fxp 編譯後的程序
.idx 索引,壓縮索引
.lbx 標簽
.log 代碼范圍日誌
.lst 向導列表的文檔
.mem 內存變數
.mnt 菜單備注
.mnx 菜單
.mpr 生成的菜單程序
.mpx 編譯後的菜單程序
.ocx ActiveX 控制項
.pjt 項目備注
.pjx 項目
.pqr 生成的查詢程序
.prg Visual FoxPro程序
.qpx 編譯後的查詢程序
.sct 表單備注
.scx 表單
.tbk 備注備份
.txt 文本
2. vfp中.prg程序怎麼做怎麼用
VFP+SQL主程序編程
這是給初學者推薦一種格式,不一定最好,但它卻實能正常運行
* 程序名: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 Procere 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