(1)在窗体上添加6个标签Label1~Label6,5个文本框Text1~Text5,一个由4个命令按钮组成的按钮组Command1(0)~Command1(3)和1个ADO控件Adodc1,适当设置各控件的大小及位置。
(2)设置5个标签的Caption属性分别为【学号】、【姓名】、【班级】、【年龄】和【性别】,Label6的Caption为空,所有标签的Autosize属性设置为True。设置4个命令按钮的Caption属性分别为【添加】、【删除】、【更新】和【退出】。
(3)在属性窗口中单击Adodc1的ConnectionString属性右边的


图7-29 【属性页】对话框 图7-30 【数据链接属性】对话框

图7-31 选择数据库文件并检测是否连通
(4)设置Adodc1的RecordSource属性为【学生基本资料】表。5个文本框的DataSource属性均设置为Adodc1,并将DataField属性分别与【学号】、【姓名】、【班级】、【年龄】和【性别】绑定。
(5)打开代码编辑器,输入以下代码:
Private Sub Command1_Click(Index As Integer)
Dim a As Integer
Select Case Index
Case 0
Adodc1.Recordset.MoveLast '在数据库的尾部添加新记录
Adodc1.Recordset.AddNew
Text1.SetFocus
Label6.Caption = "在“学号”处按Ese放弃,在“性别”处按回车键继续添加"
Case 1
a = MsgBox("当前记录将被删除,确定吗?", 4 + 48, "警告")
If a = vbNo Then Exit Sub
If Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Or Text4.Text = "" Or Text5.Text = "" Then
MsgBox "非法操作", vbOKOnly + vbInformation, "警告"
Adodc1.Recordset.CancelUpdate
Adodc1.Recordset.MoveFirst
Else
Adodc1.Recordset.Delete
Adodc1.Recordset.MoveLast
Adodc1.Recordset.MoveFirst
End If
Case 2 '将缓存中已被更新的数据写入数据表
If Text1.Text = "" And Text2.Text = "" And Text3.Text = "" And Text4.Text = "" And Text5.Text = "" Then
MsgBox "不能保存空记录", vbExclamation, "警告"
Text1.SetFocus
Exit Sub
Else
Adodc1.Recordset.UpdateBatch '保存添加的新记录或修改后的所有记录
Adodc1.Recordset.MoveFirst '将记录指针移动到第一条记录处
MsgBox "所有修改和添加已被保存到数据库中", vbInformation, "提示"
Label6.Caption = ""
End If
Case 3
End
End Select
End Sub
Private Sub Text1_Change()
Dim n As Integer, sum As Integer
n = Adodc1.Recordset.AbsolutePosition '变量n用于存放当前的记录号
sum = Adodc1.Recordset.RecordCount '变量sum用于存放记录总数
Adodc1.Caption = "第" & n & "条记录" & "/" & "共" & sum & "条记录"
End Sub
Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyEscape Then
Adodc1.Recordset.CancelUpdate '取消在调用Update方法前对当前记录或新记录所做的任何更改
Adodc1.Recordset.MoveFirst
Label6.Caption = ""
End If
End Sub
Private Sub Text5_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
If Text1.Text = "" And Text2.Text = "" And Text3.Text = "" And Text4.Text = "" And Text5.Text = "" Then
MsgBox "不能保存空记录", vbExclamation, "警告"
Text1.SetFocus
Exit Sub
Else
Adodc1.Recordset.UpdateBatch '保存添加的新记录或修改后的所有记录内容
End If
Adodc1.Recordset.AddNew
Text1.SetFocus
End If
End Sub
该窗体用到的主要控件情况如下:
上面左边是教师主表(js)的显示用数据网格控件DataGrid1;上面右边是课程子表(kc)的显示用数据网格控件DataGrid2;下面左边是单记录显示区,含有8个文本框Text1~Text8,用于对应显示8个字段的值;下面右边是命令按钮区,控制完成各功能的操作,命令按钮有(括号中是命令按钮名称):插入(cmdinsert)、删除(cmddelete)、修改(cmdupdate)、随机查询(cmdquery)、连接查询(cmdquery2)、汇总统计(cmdtotal)、第一(cmdfirst)、上一(cmdprior)、下一(cmdnext)、末一(cmdlast)、打印(cmdprint)\退出(cmdexit)等。
下面是带注释的全部程序代码。
标准模块jxgl.bas文件的内容为:
Public Function ConnectString() As String '返回连接数据库的字符串函数
ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=js.mdb"
End Function
' 动态执行SQL查询命令,并返回记录集的通用函数,窗体程序中广泛调用的函数。
Public Function RunSelect(ByVal SQL _
As String, MsgS As String) As ADODB.Recordset '函数名定义为记录集对象类型
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
On Error GoTo RunSelect_Error
Set cn = New ADODB.Connection
cn.Open ConnectString()
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open Trim$(SQL), cn, adOpenKeyset ' 利用记录集的OPEN方法,返回查询结果
Set RunSelect = rs ' 局部记录集对象赋给函数名
MsgS = "查询到" & rs.RecordCount & " 条记录 "
RunSelect_Exit:
Set rs = Nothing
Set cn = Nothing
Exit Function
RunSelect_Error:
MsgS = "查询错误: " & Err.Description
Resume RunSelect_Exit
End Function
Public Function RunSQL(ByVal SQL As String,MsgS As String)'直接执行更新命令函数。
Dim cn As Connection
On Error GoTo RunSQL_Error
Set cn = New Connection
cn.Open ConnectString()
cn.Execute SQL '利用连接对象的Execute方法,直接递交并执行更新类SQL命令
MsgS = SQL & " successful."
Set cn = Nothing
Exit Function
RunSQL_Error:
MsgS = "查询错误: " & Err.Description
Set cn = Nothing
End Function
Form1窗体的完整代码如下:
Dim cn As New ADODB.Connection ' 窗体私有变量的定义
Dim mrc As ADODB.Recordset, mrc2 As ADODB.Recordset
Dim txtSQL As String
Dim MsgText As String
Private Sub cmdExit_Click()
Unload Me
End Sub
Private Sub Form_Load() ' 装载窗体时显示全部教师记录
Set mrc = RunSelect("select * from js", MsgText) ' 调用RunSelect函数返回记录集给mrc
Set DataGrid1.DataSource = mrc
If mrc.RecordCount >= 1 Then
Call DataGrid1_Click '调用DataGrid1单击事件,刷新单记录区的字段值,保持与网格控件中记录的一直,下同。
End If
End Sub
Private Sub cmdfirst_Click()
If mrc.RecordCount >= 1 Then
mrc.MoveFirst '记录集指针指向第一条记录
Call DataGrid1_Click
End If
End Sub
Private Sub cmdlast_Click()
If mrc.RecordCount >= 1 Then
mrc.MoveLast '记录集指针指向最后一条记录
Call DataGrid1_Click
End If
End Sub
Private Sub cmdprior_Click()
If mrc.BOF = True Then
MsgBox "已到头!"