vfp中.prg程序怎么做怎么用
1个回答
展开全部
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 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
这是给初学者推荐一种格式,不一定最好,但它却实能正常运行
* 程序名: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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询