vfp中.prg程序怎么做怎么用

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

clear

i=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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12536899.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存