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