kuangzw 2012-08-30
学生信息管理系统是学习编程以来的处女座,无论好与坏,它都是菜鸟成长道路上最璀璨的启明星。
对于不懂什么是需求,没有熟练掌握编程规范的我们来说,学生信息管理系统是我们初步学习、认识数据库并实际运用的典型事例。虽然只是一个简单不过的例子,但它学习编程起着巨大的作用,不仅仅可以初步掌握、运用数据库,更重要的是提高对数据库学习的兴趣。有了基础和兴趣,你还怕学不会数据库吗?
学生信息管理系统非常的简单,解决了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
虽然这仅是对数据库最基础、最基本的学习和运用,对于大牛们来讲,代码太简单了,不值得一提。我反而觉得是菜鸟程序员成长道路上的敲门砖。
就当是小试牛刀,为编程打下良好的基础。有句话说的好:良好的基础是成功的一半。“万丈高楼平地起”说的是从基础做起,从零开始,事实上是包含地面之下的基础的,决非只是从地面开始。