这是给初学者推荐一种格式,不一定最好,但它却实能正常运行
* 程序名: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
cleari=2
do while .t.
x=0
for j=2 to i-1
if i/j=int(i/j)
x=1
endif
endfor
if x=0
if (i+1000)/37=int((i+1000)/37)
?"一迹搜个素数加上1000以后是37的倍数,满姿简历足这个条件的最小素咐氏数是:",i
exit
endif
endif
i=i+1
enddo
程序如下:禅卖clear
accept
"请输入查找的学号告纯:"
to
xh
select
*
from
学生表
where
学号=xh
if
_tally>0
then
&&找到学生
select
a.学号,课程名,成绩,学分
from
学生表
a,课程表
b,成绩表
c
where
a.学号=c.学号
and
b.课程号=c.课程号
and
a.学贺友逗号=xh
into
table
test
else
?
"查无此学生信息!"
endif
return
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)