学生信息管理系统是学习编程以来的处女座,无论好与坏,它都是菜鸟成长道路上最璀璨的启明星。
对于不懂什么是需求,没有熟练掌握编程规范的我们来说,学生信息管理系统是我们初步学习、认识数据库并实际运用的典型事例。虽然只是一个简单不过的例子,但它学习编程起着巨大的作用,不仅仅可以初步掌握、运用数据库,更重要的是提高对数据库学习的兴趣。有了基础和兴趣,你还怕学不会数据库吗?
学生信息管理系统非常的简单,解决了VB与数据库,最主要的两大问题:
一、调用数据库
二、对数据的增、删、改、查
数据库的调用(用于调用经常使用,在模块中定义一个函数):
Public Function ExecuteSQL(ByVal strSQL As String, MsgString As String) As ADODB.Recordset
'定义ADO对象
Dim Cnn As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim sTokens() As String
'错误处理
On Error GoTo Error_Handle
'拆分sql语句付给数组
sTokens = Split(strSQL)
'打开连接
Set Cnn = New ADODB.Connection
Cnn.Open ConnectString
'如果插入,删除,更新语句,则不返回结果。如果是查询语句则返回结果集
If InStr("insert,delect,update", UCase$(sTokens(0))) Then
Cnn.Execute strSQL
MsgString = sTokens(0) & "query successful"
Else
Set Rst = New ADODB.Recordset
Rst.Open Trim$(strSQL), Cnn, adOpenKeyset, adLockOptimistic
Set ExecuteSQL = Rst
MsgString = "查询到" & Rst.RecordCount & "条记录"
End If
Exit Function
'错误处理,如果出现错误,记录错误信息,然后退出
Error_Handle:
'卸载ADO对象
Set Rst = Nothing
Set Cnn = Nothing
End Function
我们以添加学籍、删除学籍信息、修改学籍和查询学籍为例,为大家讲解对数据的增、删、改、查。
在增、删、改、查学籍信息时,对于重复的部分,定义一个过程,方便调用。
Public Sub ViewData() '赋值过程
TxtStuId.Text = StudentInfo.Fields(0)
TxtStuname.Text = StudentInfo.Fields(1)
CmbSex.Text = Trim(StudentInfo.Fields(2))
DTPBirthday.Value = Format(StudentInfo.Fields(3), "yyyy-mm-dd")
CmbClassNo.Text = StudentInfo.Fields(4)
TxtTel.Text = StudentInfo.Fields(5)
DTPEntrancedate.Value = Format(StudentInfo.Fields(6), "yyyy-mm-dd")
TxtAddress.Text = StudentInfo.Fields(7)
TxtComment.Text = StudentInfo.Fields(8)
End Sub
添加学籍信息:
Dim objRs As ADODB.Recordset
Dim strSQL As String
Dim Msgtxt As String
'调用execute函数执行sql语句,返回学生信息集
strSQL = "select * from student_info where student_Id='" & Trim(TxtStuId.Text) & "'"
Set objRs = ExecuteSQL(strSQL, Msgtxt)
'判断学号是否重复,重复则重新输入,不重复进入下一步判断
If objRs.EOF = False Then
MsgBox "学号重复,请重新输入!", vbOKOnly + vbExclamation, "警告"
objRs.Close
TxtStuId.SetFocus
Else
objRs.Close
'判断出生日期格式是否正确,正确则进行下一步判断
If Not IsDate(DTPBirthday.Value) Then
MsgBox "出生时间应输入日期格式(yyyy-mm-dd)!", vbOKOnly + vbExclamation, "警告"
DTPBirthday.SetFocus
Else
DTPBirthday = Format(DTPBirthday, "yyyy-mm-dd")
'判断入校日期格式是否正确,正确则开始向数据库学籍信息集添加信息
If Not IsDate(DTPExtrance.Value) Then
MsgBox " 入校时间格式应输入日期格式(yyyy-mm-dd)!", vbOKOnly + vbExclamation, "警告"
DTPExtrance.SetFocus
Else
DTPExtrance = Format(DTPExtrance, "yyyy-mm-dd")
'调用execute函数执行sql语句,返回学生信息结果集
strSQL = "select * from student_info"
Set objRs = ExecuteSQL(strSQL, Msgtxt)
objRs.AddNew
With objRs
.Fields(0) = Trim(TxtStuId.Text)
.Fields(1) = Trim(TxtStuname.Text)
.Fields(2) = Trim(CmbSex.Text)
.Fields(3) = Trim(DTPBirthday.Value)
.Fields(4) = Trim(CmbClassNo.Text)
.Fields(5) = Trim(TxtTele.Text)
.Fields(6) = Trim(DTPExtrance.Value)
.Fields(7) = Trim(TxtAddress.Text)
.Fields(8) = Trim(TxtComment.Text)
.Update
End With
'提示成功信息
MsgBox "添加学籍信息成功!", vbOKOnly + vbExclamation, "警告"
objRs.Close
Unload Me
End If
End If
End If
删除学籍信息:
Dim intMsgbox As Integer
vntBookmark = StudentInfo.Bookmark
intMsgbox = MsgBox("确定要删除当前记录", vbOKCancel, "删除记录")
If intMsgbox = vbOK Then
StudentInfo.MoveNext
'根据要删除记录的位置不同,选择不同的删除方式
'如果要删除的记录是记录集的最后一条记录
If StudentInfo.EOF Then
'记录已经是最后一条记录,需要移到第一条记录
StudentInfo.MoveFirst
'记录当前的书签
vntBookmark = StudentInfo.Bookmark
'返回上一条记录
StudentInfo.MoveLast
'删除记录
StudentInfo.Delete
'返回刚才书签的记录位置
StudentInfo.Bookmark = vntBookmark
Call ViewData
Else
'记录当前指针的位置
vntBookmark = StudentInfo.Bookmark
StudentInfo.MovePrevious
StudentInfo.Delete
StudentInfo.Bookmark = vntBookmark
Call ViewData
End If
StudentInfo.Bookmark = vntBookmark
Call ViewData
End If
修改学籍信息:
Dim strSQL As String
Dim Msgtxt As String
Dim TempRs As ADODB.Recordset
'删除当前的记录
StudentInfo.Delete
'取得记录集
strSQL = "select * from student_info where student_Id = '" & Trim(TxtStuId.Text) & "'"
Set TempRs = ExecuteSQL(strSQL, Msgtxt)
'判断学号是否重复,若重复,则提示信息,不重复则进一步验证
If TempRs.EOF = False Then
MsgBox "学号重复,请重新输入!", vbOKOnly + vbExclamation, "警告"
TempRs.Close
Set TempRs = Nothing
TxtStuId.SetFocus
Else
'关闭临时记录,并释放
TempRs.Close
Set TempRs = Nothing
'判断日期格式是否正确,不正确,则提示信息,正确则进一步验证
If Not IsDate(DTPBirthday.Value) Then
MsgBox "出生日期的格式应输入(yyyy-mm-dd)!", vbOKOnly + vbExclamation, "警告"
DTPBirthday.SetFocus
Else
DTPBirthday.Value = Format(DTPBirthday.Value, "yyyy - mm - dd")
'判断入校日期格式是否正确
If Not IsDate(DTPEntrancedate.Value) Then
MsgBox "入校日期格式应输入(yyyy-mm-dd)!", vbOKOnly + vbExclamation, "警告"
DTPEntrancedate.SetFocus
Else
DTPEntrancedate.Value = Format(DTPEntrancedate.Value, "yyyy-mm-dd")
'向记录中添加记录
StudentInfo.AddNew
With StudentInfo
.Fields(0) = Trim(TxtStuId.Text)
.Fields(1) = Trim(TxtStuname.Text)
.Fields(2) = Trim(CmbSex.Text)
.Fields(3) = Trim(DTPBirthday.Value)
.Fields(4) = Trim(CmbClassNo.Text)
.Fields(5) = Trim(TxtTel.Text)
.Fields(6) = Trim(DTPEntrancedate.Value)
.Fields(7) = Trim(TxtAddress.Text)
.Fields(8) = Trim(TxtComment.Text)
.Update
End With
'记录添加成功
MsgBox "恭喜您,修改学籍成功!", vbOKOnly + vbExclamation, "警告"
StudentInfo.Bookmark = vntBookmark
Call ViewData
BlnClean = True
End If
End If
End If
查询学籍信息:
'显示第一条记录
Private Sub CmdFirst_Click()
StudentInfo.MoveFirst
Call ViewData
End Sub
'显示最后一条记录
Private Sub CmdLast_Click()
StudentInfo.MoveLast
Call ViewData
End Sub
'显示下一条记录
Private Sub CmdNext_Click()
StudentInfo.MoveNext
If StudentInfo.EOF Then
StudentInfo.MoveFirst
End If
Call ViewData
End Sub
'显示前一条记录
Private Sub CmdPrevious_Click()
StudentInfo.MovePrevious
If StudentInfo.BOF Then
StudentInfo.MoveLast
End If
Call ViewData
End Sub
虽然这仅是对数据库最基础、最基本的学习和运用,对于大牛们来讲,代码太简单了,不值得一提。我反而觉得是菜鸟程序员成长道路上的敲门砖。
就当是小试牛刀,为编程打下良好的基础。有句话说的好:良好的基础是成功的一半。“万丈高楼平地起”说的是从基础做起,从零开始,事实上是包含地面之下的基础的,决非只是从地面开始。