处女座——菜鸟程序员的工程总结

学生信息管理系统是学习编程以来的处女座,无论好与坏,它都是菜鸟成长道路上最璀璨的启明星。

对于不懂什么是需求,没有熟练掌握编程规范的我们来说,学生信息管理系统是我们初步学习、认识数据库并实际运用的典型事例。虽然只是一个简单不过的例子,但它学习编程起着巨大的作用,不仅仅可以初步掌握、运用数据库,更重要的是提高对数据库学习的兴趣。有了基础和兴趣,你还怕学不会数据库吗?

学生信息管理系统非常的简单,解决了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

虽然这仅是对数据库最基础、最基本的学习和运用,对于大牛们来讲,代码太简单了,不值得一提。我反而觉得是菜鸟程序员成长道路上的敲门砖。

就当是小试牛刀,为编程打下良好的基础。有句话说的好:良好的基础是成功的一半。“万丈高楼平地起”说的是从基础做起,从零开始,事实上是包含地面之下的基础的,决非只是从地面开始。

相关推荐