2.1工程概述
2.1.1工程主要功能
工程主要功能包含:
<1)学生信息管理模块:
该模块具体功能是学生基本基本信息地添
加、信息修改、删除和查询,排序统计;
(2)权限管理模块:
该模块主要负责管理用户地信
息,区分不同级别地用户,可提高系统安全性;<3)统计及报表;<4)数据管理四个部分.其
操作流程如下所示:
b5E2RGbCAP
2.1.2程序文件结构
□至口
-JFflinis
H
口vrm-.E;
Haurxian(cianx^.H;卸JJCSIE(UPDiTLin)-jMaduks
盘Modulel(Nodutel-tHSl
F■SDsigriefs
RDatfRssDnl
图2-1程序文件结构
2.2全局变量和数据库设计
2.2.1定义全局变量
全局变量地定义:
PublicFlagAsInteger
PublicusernameAsString
这两个变量用来存放登陆用户名和相应等级,定义在标准模块Modulel.BAS中.
公有函数<可执行SQL语句,返回记录集)地定义:
PublicFunctionexesql(ByValsqlAsString>AsADODB.Recordsetp1EanqFDPw
sql=Trim$(sql>
Setconn=NewADODB.Connection
Setrst=NewADODB.Recordset
conn.ConnectionString="dsn=student"'ODB(数据源名
conn.Open
Setrst.ActiveConnection=conn
rst.LockType=adLockOptimistic
rst.CursorType=adOpenKeyset
rst.Opensql
Setexesql=rst
Setrst=Nothing
Setconn=Nothing
EndFunction
公有函数亦定义在标准模块Modulel.BAS中.
2.2.2数据库地设计
物理数据库名:
student
ODBC数据源名:
student
字段名
主键
数据类型
长度
必填
默认值
CHECK勺束
说明
Sno
char
8
V
学号
Sname
char
5
V
姓名
Ssex
char
2
V
性别
Sbirthday
datetime
8
[1/1/1949
1/1/2018]
出生
日期
Sdept
char
20
信科系
系科
Sgrade
int
4
[1,4]
年级
2.2.1S表<学生基本信息表)
字段名
主键
数据类型
长度
必填
默认值
CHECK
约束
说明
username
char
8
V
用户名
password
char
5
V
密码
jibie
int
2
V
1
等级
2.2.2yonghu表<学生基本信息表)
2.3效果和关键实现
2.3.1登陆模块(窗体名:
login>
关键技术:
1、操作数据库地专用函数exesql也应添加到标准模块Modulel.BAS中并在VB在VB工程-
—引用中添力口
MicrosoftActiveXDataObjects2.5Library.DXDiTa9E3d
2、登陆错误次数限制3次不允许用户无止尽尝试密码,一旦错误超过三次程序自动结束,在
窗体通用部分首先定义窗体级变量TIM,,核心程序如下:
RTCrpUDGiT
'验证操作员及密码
DimsqlAsString
sql="select*fromyonghuwhereusername="'+Combo1.Text+"'and
5PCzVD7HxA
password^"+Text2.Text+""'
Setrs=exesql(sql>
Ifrs.RecordCount>0Then
Loadmain
main.Show
username=Combol
UnloadMe
ElselfTIM=3Then'密码输错3次,退出系统
myval=MsgBox("密码输入错误,请向系统管理员查询!
",0,"">
Ifmyval=vbOKThenEnd
Else
MsgBox"输入错误,你还有”&3-TIM&”次机会”
TIM=TIM+1
EndIf
3、支持键盘操作,例TEXT2文本框中支持方向键代码如下:
PrivateSubtext2_KeyDown(KeyCodeAsInteger,ShiftAsInteger>jLBHrnAILg
IfKeyCode=vbKeyReturnThenCmdOk.SetFocus'按回车键CmdOk获得焦点
xHAQX74J0X
IfKeyCode=vbKeyUpThenCombo1.SetFocus
IfKeyCode=vbKeyDownThenCmdOk.SetFocus
EndSub
4、密码框中输入任何字符以制定字符显示<例"*”),应设置其passwordchar属性地值即
可.
2.3.2学生信息管理模块(窗体名:
main>
图2-3学生信息管理界面(窗体名:
main>关键技术:
1采用adodc和datagrid显示数据.
操作步骤:
<1)选中工程-部件
7MicrosoftADODataControl60(OLEDB1
HicrosoftDataGr1dControl6.0(OLEDB^l
(2>Adodc控件完成与各类数据库地连接(连接ODBC数据源student>,可执行
(select*froms>.LDAYtRyKfE
(3>datagrid控件完成数据地显示(指定其DataSource为Adodc控件>.
2、记录移动技术
首条:
Adodcl.Recordset.MoveFirst
未条:
Adodcl.Recordset.MoveLast
上一条<注意应判断是否已移到最前,如果不判断移到第1条记录后再往前移动
错),关键代码如下:
IfNotAdodc1.Recordset.BOFThen
Adodcl.Recordset.MovePrevious
EndIf
下一条<注意应判断是否已移到最后,如果不判断移到第后条记录后再往后移动
错),关键代码如下:
sql命令
程序就出
程序就出
IfNotAdodc1.Recordset.EOFThen
AdodcI.Recordset.MoveNext
EndIf
3、数据删除技术<应判断是否存在记录,否则不存在记录作删除操作程序报错)关键代码如
下:
IfAdodcI.Recordset.RecordCount<>0Then
Dimsss
sss=Trim(Adodc1.Recordset.Fields("sno">>
IfMsgBox("真地要删除["+sss+"]吗?
",vbYesNo,"系统友情提示">=vbYes
ThenZzz6ZB2Ltk
Adodc1.Recordset.Delete
EndIf
EndIf
4、查询技术:
在这里强调标准SQL语句地语法问题,对于字符数据匹配,要加单引号,而对于数值型字段不
需要加,例如SNO(char>与text1是否匹配地sql语句为:
”select*fromswhere
sno='”&text1&”’”,例如Sgrade(int>与textl是否匹配地sql语句为”select
*fromswhereSgrade=”&text1dvzfvkwMIi
5、聚集函数地使用(可以给聚集函数起别名>,使用方法如下:
DimtsqltAsString
sqlt="selectcount(*>as总人数fromswhere"&Combol.Text&Combo2.Text&
"”'&Textl&rqyn14ZNXI
Setrs=exesql(sqlt>'调用执行SQL函数,已经在模块中添加
Text2.Text=rs("总人数”〉
5、增加修改技术<共用界面update)
增加全局变量PublicFlagAsInteger,Flag=0'增加记录,Flag=1'修改记录
EmxvxOtOco
IfFlag=1Then
Calledit'调用编辑过程
Else
Calladd'调用增加过程
EndIf
增加记录时,程序中应考虑主键,空值,check等约束,因此程序中必须增加容错判断,代码如
下:
Subadd(>'注意也可以直接使用insert语句
DimsqlAsString
sql="select*fromswheresno="'&Text1.Text&""'SixE2yXPq5
Setrs=exesql(sql>
IfText1.Text=""OrText2.Text=""Then
MsgBox"学号姓名不能空”
ExitSub
EndIf
IfDTPicker1.Value>#1/1/2018#OrDTPicker1.Value<#1/1/1949#Then6ewMyirQFL
MsgBox"出生日期不合法<1949-1-1~2018-1-1)!
"
ExitSub
EndIf
Ifrs.RecordCount=0Then
rs.AddNew
rs("sno">=Text1
rs("Sname"〉=Text2
IfOption1.Value=TrueThen
rs("Ssex">="男”
Else
rs("Ssex">="女”
EndIf
rs("Sbirthday">=DTPicker1.Value
rs("Sdept">=Text3
rs("Sgrade">=CInt(Combo1.Text>
rs.UPDATE
MsgBox"增加记录成功”
Else
MsgBox"学号重复无法添加!
”
EndIf
EndSub
2、编辑记录时,首先加载被编辑地数据到各控件,因此在窗体地相应事件中添加:
PrivateSubForm_Load(>
Combol.Addltem"1"
Combo1.Addltem"2"
Combo1.AddItem"3"
Combo1.AddItem"4"
IfFlag=1Then'修改数据,首先加载该条数据FLAG全局变量.
Text1=main.Adodc1.Recordset.Fields("sno">
Text1.Enabled=False'学号无法更改
Text2=main.Adodc1.Recordset.Fields("sname"〉
Ifmain.Adodc1.Recordset.Fields("ssex">="男"Then
Optionl.Value=True
Else
Option2.Value=True
EndIf
DTPickerl.Value=main.Adodc1.Recordset.Fields("sbirthday">kavU42VRUs
Text3=main.Adodc1.Recordset.Fields("sdept">
Combol.Text=main.Adodc1.Recordset.Fields("sgrade">y6v3ALoS89
EndIf
EndSub
具体编辑过程如下:
Subedit(>'注意也可以直接使用update语句
DimsqlAsString
sql="select*fromswheresno="'&Textl.Text&""'M2ub6vSTnP
Setrs=exesql(sql>
IfTextl.Text=""OrText2.Text=""Then
MsgBox"学号姓名不能空”
ExitSub
EndIf
IfDTPickerl.Value>#1/1/2018#OrDTPickerl.Value<#1/1/1949#Then
MsgBox"出生日期不合法<1949-1-1~2018-1-1)!
"
ExitSub
EndIf
rs("Sname"〉=Text2
IfOption1.Value=TrueThen
rs("Ssex">="男”
Else
rs("Ssex">="女”
EndIf
rs("Sbirthday">=DTPickerl.Value
rs("Sdept">=Text3
rs("Sgrade">=CInt(Combo1.Text>
rs.UPDATE
MsgBox"增加更新成功”
EndSub
6,权限限制技术:
PrivateSubForm_Activate(>
'权限判断
'1级权限所有权限
'等级2:
拥有数据查询,增加权限
'等级3:
拥有数据查询
DimsqlAsString
sql="select*fromyonghuwhereusername="'&username&""'
Setrs=exesql(sql>
Ifrs("jibie">=2Then
Command3.Enabled=False
OYujCfmUCw
eUts8ZQVRd
Command4.Enabled=False
Elselfrs("jibie">=3Then
Command3.Enabled=False
Command4.Enabled=False
Command5.Enabled=False
EndIf
EndSub
7,报表打印技术(在报表中添加相应控件>:
PrivateSubDataReport」nitialize(>
Setrs1=exesql(sqltext>
'字段名
TlrRGchYzg
7EqZcWLZNX
SetDataReportl.DataSource=rs1'设置DataReport地数据源sQsAEJkW5T
DataReportl.Sections("Section1">.Controls("text1">.DataField="sno
GMslasNXkA
DataReportl.Sections("Section1">.Controls("text2">.DataField="sname"
DataReportl.Sections("Section1">.Controls("text3">.DataField="ssex"
DataReportl.Sections("Section1">.Controls("text4">.DataField"sbirthday"izq7iGfO2E
DataReportl.Refresh
EndSub
2.3.3增加、修改学生信息模块(窗体名:
update>
图2-4增加学生信息界面(窗体名:
update〉
图2-5修改学生信息界面窗体名:
update
2.3.4查询打印报表模块(窗体名:
datareport1>
学'上fri上I、
T■
1*电1
4&
肚用•
WAC■V■
1life#!
1r■
X.•
HM1
丘
■■■JVi
M-E■
OBJt*W•
lif^T.I.1
图2-6查询打印报表界面(datareport1>
2.3.5权限管理模块(窗体名:
datareport1>
图2-7权限管理界面(窗体名:
quanxian>
2.4本实例小结
本章通过一个简单完整地应用程序开发实例,介绍了数据库应用系统开发中常用地一些
技术,适合C级学生完成,涵盖了SQL地使用,常用控件地使用,报表地使用,我们在开发过程中,应充分考虑到到用户地需要,尽量地方便用户使用,例如,在这个例子中支持了键盘操作.当
然本系统只是一个示例,在信息表述上不够完备,通用性不强,比如权限设置不够灵活,一些模块信息不够详细,读者可以根据实际情况来完善我们地例子,把它做得更加人性化,智能化,通
用化.zvpgeqJ1hk
第3章医院体检结论查询打印系统