1. 程式人生 > >處女座——菜鳥程式設計師的工程總結

處女座——菜鳥程式設計師的工程總結

學生資訊管理系統是學習程式設計以來的處女座,無論好與壞,它都是菜鳥成長道路上最璀璨的啟明星。

對於不懂什麼是需求,沒有熟練掌握程式設計規範的我們來說,學生資訊管理系統是我們初步學習、認識資料庫並實際運用的典型事例。雖然只是一個簡單不過的例子,但它學習程式設計起著巨大的作用,不僅僅可以初步掌握、運用資料庫,更重要的是提高對資料庫學習的興趣。有了基礎和興趣,你還怕學不會資料庫嗎?

學生資訊管理系統非常的簡單,解決了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

雖然這僅是對資料庫最基礎、最基本的學習和運用,對於大牛們來講,程式碼太簡單了,不值得一提。我反而覺得是菜鳥程式設計師成長道路上的敲門磚。

就當是小試牛刀,為程式設計打下良好的基礎。有句話說的好:良好的基礎是成功的一半。“萬丈高樓平地起”說的是從基礎做起,從零開始,事實上是包含地面之下的基礎的,決非只是從地面開始。