资源描述
目录
实验一软件分析3
一、功能说明3
二、E-R图3
三、逻辑表格5
四、任务6
实验二创建项目及数据库6
一、创建项目6
二、创建数据库6
三、创建表并设定索引6
四、建立表之间的关系8
五、任务9
实验三数据可视化操作9
一、添加记录9
二、修改记录12
三、删除记录12
四、任务12
实验四使用命令操作数据库12
一、数据库及表操作12
二、任务15
实验五表单设计15
一、表单分析15
二、使用向导创建表单16
三、使用表单设计器修改表单19
四、完成其他表单23
实验六编写代码28
一、创建系统主程序28
二、编写登录表单的代码29
三、编写主表单程序代码30
四、编写管理员管理代码34
五、提示信息添加代码36
六、编写管理信息代码37
七、今日提醒代码编写39
八、编写部门管理代码41
九、员工管理代码编写45
十、使菜单和工具栏与表单关联45
十一、任务46
实验七设计报表46
一、为报表准备数据46
二、设计报表47
三、操作注意51
四、运行表单51
五、任务51
实验八编译发布52
一、软件的编译52
二、制作安装盘52
三、任务56
实验九分析及优化56
实验一 软件分析
请从网站下载示例程序,分析软件的功能并列出,并从中抽象出实体,画出软件的E—R图并进行数据库逻辑设计,画出数据库逻辑设计表格.参考如下:
一、 功能说明
1) 系统登录控制:要求填写用户名及密码,并进行了3次连续错误后系统退出功能.
2) 部门编码设置:主要是用来设置部门的层级关系.
3) 部门信息设置:部分的基本信息,如地址、电话等。
4) 员工信息管理:管理企业内部员工的信息,还可以设置生日提醒.
5) 提醒设置功能:可以通过设置信息及接收用户及时间,当被设置的用户登录时显示给用户。
6) 今日提醒功能:根据提醒设置,显示相应信息。
7) 系统设置:修改使用软件的单位信息.
8) 密码修改功能:修改用户的密码。
二、 E—R图
首先是进行实体的抽象,通过系统登录功能及用户密码修改功能,我们可以抽象出“用户”实体,通过部门编码及部门信息管理功能,可以抽象出“部门”实体,通过员工信息管理可得到“员工”实体,通过提醒功能及今日提醒功能可以抽象出“提醒"实体,最后就是系统基本信息,可以得到“系统”实体。
部门信息
员工信息
提醒信息
包含
提醒
1
n
n
1
实体之间关系有E—R图
提醒信息
编码
员工编号
提醒类别
提醒内容
提醒日期
提醒实体
用户信息
用户名
密码
姓名
用户信息实体的E-R图
部门信息
编号
上层编号
单位名称
单位地址
。。。
部门信息实体的E—R图
员工信息
编号
姓名
生日
电话
。。。
员工信息实体的E—R图
系统信息
企业名称
显示提醒
系统信息实体的E-R图
三、 逻辑表格
通过上面的E—R图,我们已经确立了实体,现在我们要进一步把实体及属性更完善,进行数据库的逻辑设计
提醒信息
字段名
字段类型
宽度
可否为空
默认值
说明
Warnid
自动编号
4
主索引
emplyid
整型
4
否
0
普通索引
当为0时代表发给所有用户
Wtype
整型
4
不同的数值代表不同类型
showdate
日期型
8
显示日期
msg
字符型
200
显示的信息
用户信息
字段名
字段类型
宽度
可否为空
默认值
说明
uname
字符型
20
否
主索引,用户名
upwd
字符型
20
否
0
密码
truename
字符型
8
真实姓名
部门信息
字段名
字段类型
宽度
可否为空
默认值
说明
ID
自动
4
主索引,编号
TopID
整型
4
上层编号
DPName
字符
50
单位名称
DPAddr
字符
100
单位地址
DPPhone
字符
30
单位电话
DPPerson
字符
8
单位联系人
员工信息
字段名
字段类型
宽度
可否为空
默认值
说明
ID
自动
4
编号,主索引
uname
字符
8
姓名
usex
字符
2
性别
birthday
日期
8
生日
DPID
整型
4
所属部门
ISMsg
逻辑
1
是否生日提醒
上面的字符可以进行相应的增加或删减,关键在于想实现的功能.
四、 任务
仔细分析软件本身,并可以进行相应改进,完成软件分析任务。
把个人设计的软件也进行上述的过程,完成数据库概念设计及逻辑设计。
实验二 创建项目及数据库
一、 创建项目
1) 在硬盘的相应目录下建立自己的项目文件夹,并在文件夹下建立data和doc两个文件夹分别用来存放数据文件及开发文档。
2) 打开VFP8。0,建立项目文件,命名为EPUser(可任意,为了后面方便表达).
二、 创建数据库
在项目管理器中新建一个数据库EPData,并保存在Data文件夹中。
三、 创建表并设定索引
1) 在EPData数据库下创建新表warning。表设计器如下:
2) 在warnid上建立主索引,在emplyid上建立普通索引。
3) 依照上边的方法建立其他数据表.最终如下:
四、 建立表之间的关系
1) 选中Epdata数据库,单击修改打开数据库设计器
2) 把主表的主索引拖至从表的普通索引上建立关系
五、 任务
a) 完成企业员工管理软件的项目创建及数据库、数据库表的创建,并建立相应关系。
b) 完成自主设计的软件的数据库、数据库表的创建工作。
实验三 数据可视化操作
一、 添加记录
a) 打开实验二创建的项目,并打开epdata数据库的设计器。
b) 双击Depart和employ表之间的关系线,打开关系设定窗口。
c) 选择“referential integrity”选项,并选择插入规则,选择级连项,实现两表之间的“相对完整性”,确定退出窗体。
d) 在项目管理器中选择depart表,并选择“浏览”,打开浏览窗口,在“显示”菜单中选择“追加模式”,在表中添加两条数据,如下图,在这里我们可以看到“聊城大学”这个部门的topid为0而“教育传播技术学院"的topid为“聊城大学”的id,通过这种方式实现部门间的级别管理,这种方式在开发中经常使用。
e) 关闭depart表,再打开employ表,使用上述方式添加数据,当我们在Dpid中添加了一个depart表中未出现的ID值时,会出现如下错误,而输入的值为正确的,则会被确认,从这里我们可以看到完整性检查的作用。
f) 建立一个与employ结构相同的表employ1,在表中添加一些数据。
g) 在打开employ表,选择“表”菜单中的追加记录,如下图,点击来源后面的浏览按钮,找到employ1表,并设置选项,选中除自动编号以外的所有字段,确定后,查看employ表中是否添加了employ1中的数据。
二、 修改记录
打开一个添加了数据的表格,然后使用“显示”菜单中的“编辑"实现对数据的修改,不再演示,大家也可以设置表之间的关系,看一下更新规则的作用。
三、 删除记录
a) 打开一个有数据的表格,点击记录左侧的小矩形,这样记录便被逻辑删除
b) 进行物理删除,打开“表”菜单,选择彻底删除,便可以实现“物理删除"
四、 任务
在我们建立的表中添加适量数据,以方便后续操作.
实验四 使用命令操作数据库
一、 数据库及表操作
1) 创建数据库:Create DataBase stumanage
2) 创建表:Create table classes(cid I AutoInc primarykey,classname c(20))
Create Table student(stuid c(10) primary key,stuname c(10),sex c(2) check sex='男’ or sex=’女’ error “此数据只能为男或女” default ‘男’,classid I,foreign key classid tag classid references classes)
3) 修改表结构:ALTER TABLE classes add teacher c(6)ALTER TABLE classes alter teacher c(8)ALTER TABLE classes rename teacher to managerALTER TABLE classes drop manager
4) 在当前工作期中打开要使用的表:USE classes或select classes
5) 插入数据:insert into classes(classname)values(‘2004级1班')insert into classes(classname)values(‘2004级2班’)insert into classes(classname)values(‘2004级3班')
6) 浏览数据:browse或display或list,会发现使用display时只显示第一条记录,这时需要使用范围语句 display all,大家可以使用条件语句看一下结果。
7) 查看当前记录各信息:? recno() &&显示当前记录号? Bof() &&查看记录指针是否在最前?Eof() &&查看记录指针是否在最后skip —1 &&使记录指针向前滚动一条? recno()
?Bof()
?Eof()
goto top &&使记录指针移到顶端
? recno()
?Bof()
?Eof()
8) 条件定位:locate for cid=2? recno()
9) 在学生表中插入数据:INSERT into student(stuid,stuname,sex,classid)values('20040101’,'zhang’,’男’,1)INSERT into student(stuid,stuname,sex,classid)values(’20040102',’wang',’女’,2)
10) 修改学生数据:update student set classid=3 where stuid=’20040101’
11) 删除学生记录:
DELETE FROM student where stuid='20040101'LIST
12) 恢复被逻辑删除的记录:RECALL all
13) 再执行上面的删除命令后使用Pack命令,把记录从磁盘彻底删除。
14) 执行查询:
a) select * from student
b) select stuid,stuname from student
c) 向学生表中多插入几条记录
d) select distinct sex from student
e) select sex as 性别 from student
f) select * from student where stuid=’20040101’
g) select * from student where stuid in(‘20040101’,'20040102')
h) SELECT * from student where stuname like ’w%'
i) SELECT * from student where stuname like 'w_'
j) SELECT * from student where stuname like '__a%’
k) select count(*) as 学生总数 from student
l) SELECT A.*,B。classname from student A,classes B where A。classid=B。cid
m) SELECT A。*,B。classname from student A inner join classes B on A。classid=B。cid
n) SELECT A。*,B.classname from student A right outer join classes B on A。classid=B。cid
o) SELECT * from student order by stuid desc
p) SELECT top 1 * from student order by stuid desc
q) Select count(*) as stucount,classid from student group by classid
r) Select * from student into cursor test
15) 删除表:drop table studentdrop table classes
16) 删除数据库:
CLOSE ALLDELETE DATABASE stumanage
二、 任务
使用上面的命令在员工管理数据库表的添加一些记录
实验五 表单设计
一、 表单分析
根据实验一中的项目功能分析,我们需要创建以下几个表单。
1) 部分信息管理表单:实现对部分信息的添加、修改、删除等管理
2) 员工信息管理表单:实现对员工信息的添加、修改、删除等管理
3) 管理员管理表单:实现对管理员的添加、删除等管理
4) 当前用户密码修改表单:修改当前用户的密码和真实姓名
5) 信息提示表单:当启动软件时显示提示信息
6) 提示信息设置表单:设置提示信息
7) 登录表单
8) 系统设置表单
9) 关于表单
二、 使用向导创建表单
1) 打开员工管理项目,这里需要注意的是,VFP软件有可能对中文目录支持不太好,如果出现类似问题,请把项目放在一个英文目录中。
2) 在项目管理器中选择文档(documents),选择表单,并新建.
3) 选择使用向导,这里有两项,一项是表单向导,另一个是一对多表单向导,可以看出我们也可以使用向导产生基于两个表的表单。
4) 选择使用到的表字段,这里实现管理员管理的表单,所以选择Manager表中的所有字段.
5) 选择表单样式,使用默认即可。
6) 选择排序字段,这里也可以不选择。
7) 最后一步,设置表单标题并设置保存,在项目文件夹下建立forms文件夹,并把表单保存在内。
8) 最终效果如下:
9) 在我们的创建的数据库中,部门表与员工表之间存在一对多关系,使用向导自己建立一个一对多的表单。
三、 使用表单设计器修改表单
使用向导生成的表单有时不能满足我们的需要,这时,我们需要使用表单设计器来完善表单的设计。下面我们来修改一下上面的表单。
1) 选择我们刚才创建的表单,进行修改
2) 下面是表单设计器,同时会打开表单控件面板和属性面板
3) 选择表格控件,并在表单中单击,把控件添加到表单中。
4) 使用表格生成器来使表格与数据表之间绑定.
5) 选择显示的字段.
6) 设置显示样式
7) 修改表格字段显示的标题。
8) 点击OK完成修改,关闭设计器并保存修改,使用项目管理器运行表单查看最终效果。
9) 对于由向导生成的控件,可以通过属性面板进行修改,如改变标题显示(caption)。
10) 通过上述方式,多加测试,掌握表单设计的基本方法。
四、 完成其他表单
1) 部门信息管理:这里要用到一个Activex控件,方法是,打开“工具"菜单,选项中选择控件面板,找到如下图的控件:
后从控件面板中选择如下:
就可以看到我们选择的组件,拖放到表单中就可以了。
2) 员工信息管理
3) 登录表单
4) 管理员管理表单
5) 用户密码修改表单
6) 提示信息管理表单
7) 提示信息添加表单,这里用了一个时间控件,如TreeView控件一样,自行添加进来即可。
8) 提示信息显示表单
实验六 编写代码
本实验分三次完成,主要实现程序的所有代码,了解程序开发过程及代码开发技巧.
一、 创建系统主程序
主程序是所编写程序的入口,主要设置运行环境、定义变量、常量,然后调用其他表单,本程序文件保存为main。prg。
CLEAR
CLEAR ALL
*把系统菜单隐藏掉
SET SYSMENU off
*程序运行时不允许使用ESC键退出
SET ESCAPE OFF
*关闭命令显示
SET TALK OFF
*覆盖时不要确认
SET SAFETY OFF
*设置时间格式,使用四位显示年代
SET CENTURY on
SET DATE YMD
*定义一个公共变量,保存当前用户信息
PUBLIC curuser
*调用登录表单
DO FORM forms\login
*进入事务处理,当执行clean events时结束
READ events
*当结束循环时执行退出
quit
二、 编写登录表单的代码
打开实验五中已经制作的Login表单,修改控件相应属性.
控件
属性
值
组合框
Name
uname
Rowsource
manager。uname
Rowsourcetype
6-fields
Style
2-dropdown list
文本框
Name
Upwd
Passwordchar
*
表单
Autocenter
True
Borderstyle
2-固定对话框
Closble
F
Caption
用户登录
controlbox
F
MaxButton
F
MinButton
F
Name
Frmlogin
Showwindow
作为顶层表单
Windowtyp
模式
选中表单,从属性面板中找到init事件,添加如下代码:
*定义一个公共变量来保存登录次数
PUBLIC logincount
logincount=0
双击登录按钮,打开按钮的click事件:
IF ALLTRIM(thisform。uname。Value)==”" then
MESSAGEBOX(”没有选择用户名!!")
ELSE
LOCATE FOR uname=ALLTRIM(thisform.uname.value)
IF ALLTRIM(thisform.upwd.Value)=ALLTRIM(upwd) then
curuser=thisform.uname。value
thisform.Release
DO FORM forms\main
return
ELSE
logincount=logincount+1
IF logincount〈3 then
thisform。upwd。Value="”
thisform。upwd。SetFocus
MESSAGEBOX(”您的密码输入错误,请重新输入!!”,16,”错误")
ELSE
MESSAGEBOX("对不起,错误次数已达3次,不能进入系统!!",16,”报歉”)
thisform.Release
CLEAR EVENTS
CLOSE ALL
quit
endif
endif
ENDIF
为退出添加click事件:
thisform。Release
CLEAR EVENTS
quit
三、 编写主表单程序代码
主表单主要是起到调用其他表单的作用,在这里我们添加一个菜单和一个工具栏,从而了解如何创建表单与工具栏,以及如何在程序中使用它们。
创建主表单,保存为main,设置属性如下:
控件
属性
值
表单
Autocenter
True
Caption
企业员工管理系统
Height
600
Width
600
MDIform
T
Name
Frmmain
Showwindow
作为顶层表单
Windowtyp
模式
创建菜单,在项目管理器中选择“其他"选项卡,选中菜单,新建:
选择Menu,先制作如图的菜单
然后选择菜单“显示-〉常规选项”
选中“顶层表单”,设计表单时要注意的问题是,需要生成,而且每一次改动后都需要生成,否则使用的菜单是未生成前的菜单。
“菜单-〉生成菜单”:
好了,下面我们把菜单加入到主表单中去.
打开主表单,添加“init”事件:
DO menu\main.mpr WITH this
*这里的菜单地址,请根据自己的保存位置确定。这里保存到menu文件件下了。
可以运行主表单看一下效果了。
下面制作工具栏,选择“类”选项卡,新建类:
从ToolBar类继承制作自己的工具栏,添加按钮,图片资源可以从FTP得到。
设置Showwindow属性值为“在顶层表单中”.
因为工具栏是与表单一级的对象,所以表单中不能容纳工具栏,所以需要建立一个表单集来放置表单与工具栏,打开主表单,使用“表单”菜单中的“新建表单集”建立表单集对象,这时我们使用代码的方式把工具栏加入到主表单中去,设置表单集的init事件。
PUBLIC isCreateToolbar
isCreateToolbar=0
再在Activate事件中添加如下代码:
IF isCreateToolbar=0
isCreateToolbar=1
*加载类
SET CLASSLIB TO lib\myclass
*使用类创建对象
this。AddObject(”tool1",”mytoolbar”)
this.tool1.show
*把工具栏停放在表单的上部
this.tool1。dock(0)
endif
这时运行主表单,效果如下:
四、 编写管理员管理代码
控件
属性
值
表格
Name
gmanager
Enabled
False
Recordsource
Manager
表单
BufferMode
1
Caption
操作员管理
Name
frmmanager
Showwindow
在顶层表单中
打开表单的数据环境,选择manager表。设置其属性.
buffermodeOveride:2,Exlusive:True
添加按钮的click事件:
thisform。gManager。Enabled= 。T。
APPEND BLANK
GO bottom
thisform.gManager。coLUMN1。text1。SetFocus
thisform。Refresh
修改按钮的click事件:
thisform。gManager。Enabled=。t.
保存按钮的click事件:
YN=MESSAGEBOX("确定保存",4+32,"企业员工管理系统")
IF YN=6 then
IF TABLEUPDATE(。f。)=.f. then
MESSAGEBOX(”保存出错”)
ELSE
thisform。Refresh
ENDIF
ENDIF
thisform。gmanager。Enabled=。f.
取消按钮的click事件:
IF MESSAGEBOX(”确认取消",4+32,"企业员工管理系统”)==6 then
TABLEREVERT(。f.)
ENDIF
thisform.gmanager。Enabled=。f。
thisform。Refresh
删除按钮的click事件:
IF MESSAGEBOX(”确定删除”,32+4,”企业员工管理系统”)==6 then
SELECT manager
DELETE
thisform。gmanager。RecordSource=null
PACK
thisform.gmanager。RecordSource="manager”
IF EOF()
SKIP —1
ELSE
IF BOF()
SKIP
ENDIF
ENDIF
thisform。Refresh
endif
五、 提示信息添加代码
控件
属性
值
Date and timer picker
Name
msgdate
文本域
name
msgcontent
保存按钮click事件:
SET DATE YMD
SET CENTURY on
mdate=TTOD(thisform。msgdate。_value)
mcontent=ALLTRIM(thisform.msgcontent.Value)
IF EMPTY(mdate) 。and。 EMPTY(mcontent) then
MESSAGEBOX("时间和内容都不能为空")
return
ENDIF
IF MESSAGEBOX(”确定保存",4+32,"企业员工管理系统”)=6
INSERT INTO warning(emplyid,wtype,showdate,msg)values(0,0,mdate,mcontent)
MESSAGEBOX(”提示信息已经添加到数据库中",64,"企业员工管理系统”)
thisform。Release
endif
取消按钮click事件:
thisform。Release
六、 编写管理信息代码
此窗体的代码与管理员管理代码类似,所以可以很容易实现。
控件
属性
值
表格
Name
gmsg
Enabled
False
Recordsource
Manager
MousePointer
1—Arrow
表单
BufferMode
1
Caption
操作员管理
Name
Frmmsg
Showwindow
在顶层表单中
打开表单的数据环境,选择waring表。设置其属性。
buffermodeOveride:2,Exlusive:True
添加按钮onclick事件:
DO FORM forms/setmsg
Thisform。refresh
修改按钮的onclick事件:
IF MESSAGEBOX("确定保存修改信息”,4+32,”企业员工管理系统”)=6 then
IF TABLEUPDATE(.f.)=。f。 then
MESSAGEBOX(”保存出错,请检查”)
ELSE
thisform。Refresh
ENDif
ENDIF
thisform.gmsg。Enabled=。f.
取消按钮的onclick事件:
IF MESSAGEBOX("确认取消",4+32,"企业员工管理系统")==6 then
TABLEREVERT(.f。)
ENDIF
thisform。gmanager。Enabled=.f.
thisform.Refresh
删除按钮的click事件:
IF MESSAGEBOX("确定删除”,32+4,”企业员工管理系统")==6 then
SELECT waring
DELETE
thisform。gmanager。RecordSource=null
PACK
thisform.gmanager.RecordSource=”waring”
IF EOF()
SKIP -1
ELSE
IF BOF()
SKIP
ENDIF
ENDIF
thisform。Refresh
endif
七、 今日提醒代码编写
控件
属性
值
文本框
Name
msg
readonly
true
多选框
Name
isstart
表单
BufferMode
1
Caption
今日提醒
Name
Frmtoday
Showwindow
在顶层表单中
Windowtype
1—模式
标签
Name
lmsg
表单init事件:
PUBLIC i,inum
i=0
inum=0
SELECT warning
COUNT FOR showdate=DATE() to inum
IF inum<1 then
thisform。msg。Value="没有本日提醒”
thisform。lmsg.caption=”没有提醒"
ELSE
SELECT warning
SET FILTER TO showdate=DATE()
go top
i=1
thisform。msg。ControlSource=”warning.msg”
thisform。lmsg。caption="共有”+ALLTRIM(STR(inum))+”条提醒,第”+ALLTRIM(STR(i))+”条提醒"
thisform。Refresh
endif
下一条按钮单击事件:
SELECT warning
IF .not. EOF()
SKIP
i=i+1
thisform。lmsg。Caption=”共有”+ALLTRIM(STR(inum))+"条提醒,第"+ALLTRIM(STR(i))+”条提醒”
ENDIF
thisform。Refresh
确定按钮onclick事件:
IF thisform。isstart。Value=1
UPDATE sys SET isstart=。f.
ENDIF
thisform。release
八、 编写部门管理代码
部门管理表单使用了一个ActiveX控件,如果想非常细致的了解此控件的使用方法,请参考FTP上给出的资料。
控件
属性
值
树型
Name
departTree
Style
7
名称文本框
Name
Ename
controlSource
dpname
地址文本框
Name
Eaddr
controlSource
dpaddr
电话文本框
Name
Ephone
controlSource
dpphone
联系人文本框
Name
Eperson
controlSource
Dpperson
表单
BufferMode
1
Caption
部门信息管理
Name
Frmdepart
Showwindow
在顶层表单中
Windowtype
1-模式
同样要设置表单对应的depart表格的属性:buffermodeOveride:2,Exlusive:True
首先我们给表单添加init事件:
PUBLIC isedit 定义一个变量来标识当前操作是添加还是修改
PUBLIC dpid 保存当前部门编码
SELECT depart
GO top
thisform。ename。Value=dpname
thisform。eaddr.Value=dpaddr
thisform。ephone.Value=dpphone
thisform.eperson。Value=dpperson
thisform.eaddr。Enabled=。f.
thisform。ename。Enabled=。f。
thisform。eperson。Enabled=.f.
thisform.ephone。Enabled=.f.
thisform。Refresh
给树形控件添加init事件
this。Nodes.Clear
SCAN
IF topid == 0
Node = this.nodes。add(,1,”D"+ALLTRIM(STR(id)),ALLTRIM(dpname),,)
*加入根节点
ELSE
Node =this。nodes。add(”D”+ALLTRIM(STR(topid)),4,”D”+ALLTRIM(STR(id)),ALLTRIM(dpname),,)
ENDIF
ENDSCAN
树形控件的onclick事件:
SELECT depart
LOCATE FOR id=VAL(SUBSTR(this。selectedItem。Key,2))
dpid=id
thisform.ename.Value=dpname
thisform.eaddr。Value=dpaddr
thisform.ephone。Value=dpphone
thisform.eperson.Value=dpperson
添加按钮onclick事件:
thisform.ename。Value=””
thisform。eaddr。Value=""
thisform。ephone。Value=””
thisform。eperson。Value=””
thisform.eaddr。Enabled=。t.
thisform.ename。Enabled=。t。
thisform。eperson.Enabled=.t。
thisform。ephone。Enabled=。t.
isedit=”add"
thisform.Refresh
删除按钮onclick事件:
IF MESSAGEBOX(”确认要删除所选部门信息",4+32,"企业员工管理系统")==6 then
DELETE FROM depart WHERE id=dpid
PACK
thisform。departtree。Init
thisform。Refresh
ENDif
修改按钮onclick事件:
thisform。eaddr.Enabled=。t。
thisform.ename。Enabled=。t.
thisform.eperson。Enabled=。t.
thisform.ephone.Enabled=.t。
isedit="mod”
取消按钮onclick事件:
thisform。ename。Value=dpname
thisform.eaddr.Value=dpaddr
thisform.ephone。Value=dpphone
thisform。eperson。Value=dpperson
thisform。eaddr。Enabled=。f.
thisform。ename.Enabled=.f。
thisform。eperson.Enabled=。f。
thisform.ephone。Enabled=。f。
保存按钮onclick事件:
IF MESSAGEBOX(”确认要保存修改后的信息吗?”,4+32,"企业员工管理系统")==6 then
IF isedit=”mod” then
ename=ALLTRIM(thisform。ename.value)
eaddr=ALLTRIM(thisform.eaddr。value)
ephone=ALLTRIM(thisform.ephone.value)
eperson=ALLTRIM(thisform。eperson.value)
UPDATE depart SET dpname=ename,dpaddr=eaddr,dpph
展开阅读全文