處女座——菜鳥程式設計師的工程總結
阿新 • • 發佈:2018-12-24
學生資訊管理系統是學習程式設計以來的處女座,無論好與壞,它都是菜鳥成長道路上最璀璨的啟明星。
對於不懂什麼是需求,沒有熟練掌握程式設計規範的我們來說,學生資訊管理系統是我們初步學習、認識資料庫並實際運用的典型事例。雖然只是一個簡單不過的例子,但它學習程式設計起著巨大的作用,不僅僅可以初步掌握、運用資料庫,更重要的是提高對資料庫學習的興趣。有了基礎和興趣,你還怕學不會資料庫嗎?
學生資訊管理系統非常的簡單,解決了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
雖然這僅是對資料庫最基礎、最基本的學習和運用,對於大牛們來講,程式碼太簡單了,不值得一提。我反而覺得是菜鳥程式設計師成長道路上的敲門磚。
就當是小試牛刀,為程式設計打下良好的基礎。有句話說的好:良好的基礎是成功的一半。“萬丈高樓平地起”說的是從基礎做起,從零開始,事實上是包含地面之下的基礎的,決非只是從地面開始。