教 师:曾晓东 电 话:13679007201 E_mail:zengxiaodong@263.net 数据库技术 教 师:曾晓东 电 话:13679007201 E_mail:zengxiaodong@263.net
第16章 VB数据库应用编程示例 16.1 示例1 16.2 示例2 16.3 示例3 16.4 示例4 16.5 数据窗体向导
16.1 示例1 示例1窗体布局 目的:不用编写代码就可实现对数据的浏览
16.1 示例1(续) 各控件所设置的属性及属性值 对象名 属性名 属性值 AdodcStudent ConnectionString 连接到Access的“学生管理数据库.mdb” CommandType adCmdTable RecordSource Student TxtSno DataSource DataField Sno TxtSname Sname TxtSsex Ssex TxtSage Sage TxtSdept Sdept
示例1程序代码 Private Sub CmdExit_Click() End End Sub “退出”按钮 Private Sub CmdExit_Click() End End Sub 窗体加载时初始化查找 Private Sub Form_Load() '初始化要查找的系为空 TxtSearchDept.Text = ""
示例1程序代码(续) Private Sub CmdSearch_Click() “查找”按钮 Private Sub CmdSearch_Click() If Len(TxtSearchDept.Text) > 0 Then AdodcStudent.CommandType = adCmdText AdodcStudent.RecordSource = "select * from student where Sdept = '" & Trim(TxtSearchDept.Text) & "'" AdodcStudent.Refresh ' 使所设置的属性生效 Else ' 若用户未指定列名 MsgBox ("请指定要查找的系") ' 则提示用户输入系名 End If End Sub
示例1运行界面
16.2 示例2 示例2窗体布局 目的:编写代码实现对数据的操作和浏览。
命令按钮控件的对象名 “添加”命令按钮:cmdAdd “删除”命令按钮:cmdDel “更新”命令按钮:cmdUpdate “取消”命令按钮:cmdCancel “第一条”命令按钮:cmdFirst “上一条”命令按钮:cmdPrevious “下一条”命令按钮:cmdNext “末一条”命令按钮:cmdLast “退出”命令按钮:cmdExit
示例2代码 窗体启动时的初始化代码 Private Sub Form_Load() '初始时使“取消”按钮为不可用状态 CmdCancel.Enabled = False End Sub
数据操作按钮组代码 “添加”命令按钮 Private Sub CmdAdd_Click() AdodcStudent.Recordset.AddNew '使“添加”和“删除”按钮为不可用状态 CmdAdd.Enabled = False CmdDel.Enabled = False '使“更改”和“取消”按钮为可用状态 CmdUpdate.Enabled = True CmdCancel.Enabled = True End Sub
数据操作按钮组代码(续) “取消”命令按钮 Private Sub CmdCancel_Click() AdodcStudent.Recordset.CancelUpdate '使“添加”和“删除”按钮为可用状态 CmdAdd.Enabled = True CmdDel.Enabled = True '使“取消”按钮为不可用状态 CmdCancel.Enabled = False End Sub
数据操作按钮组代码(续) “删除”命令按钮 Private Sub CmdDel_Click() Dim res As Integer res = MsgBox("确实要删除此行记录吗?", _ vbExclamation + vbYesNo + vbDefaultButton2) '提示用户 If res = vbYes Then '如果确实要删除 AdodcStudent.Recordset.Delete AdodcStudent.Recordset.MoveNext If AdodcStudent.Recordset.EOF = True Then AdodcStudent.Recordset.MoveLast End If End Sub
数据操作按钮组代码(续) “更新”命令按钮 Private Sub CmdUpdate_Click() '将文本框中的当前值写入结果集相应字段中 AdodcStudent.Recordset.Fields("Sno")=Trim(TxtSno.Text) AdodcStudent.Recordset.Fields("Sname")=Trim(TxtSname.Text) AdodcStudent.Recordset.Fields("Ssex")=Trim(TxtSsex.Text) AdodcStudent.Recordset.Fields("Sage")=CInt(Trim(TxtSage.Text)) AdodcStudent.Recordset.Fields("Sdept")=Trim(TxtSdept.Text)
数据操作按钮组代码(续) “更新”命令按钮代码(续) '使更新生效 AdodcStudent.Recordset.Update '使“添加”和“删除”按钮为可用状态 CmdAdd.Enabled = True CmdDel.Enabled = True '使“取消”按钮为不可用状态 CmdCancel.Enabled = False End Sub
移动指针方法组代码 “第一条”命令按钮 “下一条”命令按钮 Private Sub CmdFirst_Click() AdodcStudent.Recordset.MoveFirst End Sub “下一条”命令按钮 Private Sub CmdNext_Click() AdodcStudent.Recordset.MoveNext If AdodcStudent.Recordset.EOF = True Then AdodcStudent.Recordset.MoveLast End If
移动指针方法组代码(续) “末一条”命令按钮 “上一条”命令按钮 Private Sub CmdLast_Click() AdodcStudent.Recordset.MoveLast End Sub “上一条”命令按钮 Private Sub CmdPrevious_Click() AdodcStudent.Recordset.MovePrevious If AdodcStudent.Recordset.BOF = True Then AdodcStudent.Recordset.MoveFirst End If
结束程序代码 “退出”命令按钮 Private Sub CmdExit_Click() End End Sub
示例2运行界面
16.3 示例3 窗体布局 目的:利用DataGrid控件实现对数据表格式浏览,并实现两个窗体间的互动。
Form1上的代码 "退出"按钮 "查找"按钮 Private Sub CmdExit_Click() End End Sub Private Sub CmdSearch_Click() Form2.Show ' 显示Form2窗体
Form2上的代码 “返回”按钮 Private Sub CmdReturn_Click() Unload Me End Sub
Form2上的代码(续) 初始化 Private Sub Form_Load() Dim strSno As String Dim strSelect As String ' 得到Form1窗体上当前显示的学号的值 strSno = Trim(Form1.TxtSno.Text) ' 编写满足要求的查询语句,查找学号值等于给定值的学生的姓名、修的课程名、' 学分和成绩 strSelect = "select Sname, Cname,Ccredit,Grade from (student s join sc on s.sno = sc.sno) join course c on c.cno = sc.cno where sc.sno = '" & strSno & "'"
Form2上的代码(续) 初始化(续) '设置ADO数据控件相应的属性 AdodcGrid.CommandType = adCmdText AdodcGrid.RecordSource = strSelect '使ADO数据控件的新属性生效 AdodcGrid.Refresh '设置DataGrid控件的数据源为ADO数据控件的结果集 Set DtgCond.DataSource = AdodcGrid '调用DtgCond控件的初始化过程 Call InitGrid End Sub
Form2上的代码(续) 初始化dtgCond控件 Private Sub InitGrid() With DtgCond .Columns(0).Caption = "姓名" .Columns(1).Caption = "课程名" .Columns(2).Caption = "学分" .Columns(3).Caption = "成绩" '设置DtgCond的列宽 .Columns(0).Width = 1000 .Columns(1).Width = 2000 .Columns(2).Width = 800 .Columns(3).Width = 800 End With End Sub
16.3 示例3(续) 运行界面
16.4 示例4 窗体布局 目的:用ADO对象实现示例2的功能。
示例4代码 声明窗体级的对象 Dim adoCon As ADODB.Connection Dim adoRst As ADODB.Recordset
初始化代码 窗体启动时的代码 Private Sub Form_Load() '建立连接 Set adoCon = New ADODB.Connection adoCon.Open "Provider=SQLOLEDB.1;Persist Security Info=False; User ID=sa;Initial Catalog=学生管理数据库; Data Source=(local)" '建立记录集 Set adoRst = New ADODB.Recordset adoRst.ActiveConnection = adoCon adoRst.CursorLocation = adUseClient
初始化代码(续) adoRst.CursorType = adOpenDynamic adoRst.LockType = adLockOptimistic adoRst.Source = "Student" adoRst.Open , , , , adCmdTable '显示数据 Call Display '初始时使“取消”按钮为不可用状态 CmdCancel.Enabled = False End Sub
两个通用的过程 将记录集中各字段的数据绑定到文本框中 Private Sub Display() TxtSno.Text = convertNull(adoRst.Fields("sno").value) TxtSname.Text=convertNull(adoRst.Fields("sname").value) TxtSsex.Text = convertNull(adoRst.Fields("ssex").value) TxtSage.Text = convertNull(adoRst.Fields("sage").value) TxtSdept.Text = convertNull(adoRst.Fields("sdept").value) End Sub
两个通用的过程(续) 将空值字段转化为空字符串 Private Function convertNull(value As Variant) As Variant If IsNull(value) = True Then convertNull = "" Else convertNull = value End If End Function
数据操作按钮组代码 Private Sub CmdAdd_Click() adoRst.AddNew '使“添加”和“删除”按钮为不可用状态 “添加”命令按钮 Private Sub CmdAdd_Click() adoRst.AddNew '使“添加”和“删除”按钮为不可用状态 CmdAdd.Enabled = False CmdDel.Enabled = False '使“更改”和“取消”按钮为可用状态 CmdUpdate.Enabled = True CmdCancel.Enabled = True
TxtSno.Text = "" TxtSname.Text = "" TxtSsex.Text = "" “添加”命令按钮(续) '清空文本框中显示的内容 TxtSno.Text = "" TxtSname.Text = "" TxtSsex.Text = "" TxtSage.Text = "" TxtSdept.Text = "" End Sub
数据操作按钮组代码(续) “取消”命令按钮 Private Sub CmdCancel_Click() adoRst.CancelUpdate '使“添加”和“删除”按钮为可用状态 CmdAdd.Enabled = True CmdDel.Enabled = True '使“取消”按钮为不可用状态 CmdCancel.Enabled = False Call Display '显示记录集当前记录 End Sub
数据操作按钮组代码(续) “删除”命令按钮 Private Sub CmdDel_Click() Dim res As Integer res = MsgBox("确实要删除此行记录吗?", _ vbExclamation + vbYesNo + vbDefaultButton2) If res = vbYes Then '如果确实要删除 adoRst.Delete adoRst.MoveNext If adoRst.EOF = True Then adoRst.MoveLast End If Call Display '显示记录集当前记录 End Sub
数据操作按钮组代码(续) “更新”命令按钮 Private Sub CmdUpdate_Click() '将文本框中的当前值写入结果集相应字段中 adoRst.Fields("Sno") = Trim(TxtSno.Text) adoRst.Fields("Sname") = Trim(TxtSname.Text) adoRst.Fields("Ssex") = Trim(TxtSsex.Text) adoRst.Fields("Sage") = CInt(Trim(TxtSage.Text)) adoRst.Fields("Sdept") = Trim(TxtSdept.Text) adoRst.Update '使更新生效 CmdAdd.Enabled = True '使“添加” 按钮为可用状态 CmdDel.Enabled = True '使 “删除”按钮为可用状态 CmdCancel.Enabled = False '使“取消”按钮为不可用状态 End Sub
移动指针方法组代码 “第一条”命令按钮 “末一条”命令按钮 Private Sub CmdFirst_Click() adoRst.MoveFirst Call Display '显示记录集当前记录 End Sub “末一条”命令按钮 Private Sub CmdLast_Click() adoRst.MoveLast
移动指针方法组代码(续) “下一条”命令按钮 Private Sub CmdNext_Click() adoRst.MoveNext If adoRst.EOF = True Then adoRst.MoveLast End If Call Display '显示记录集当前记录 End Sub
移动指针方法组代码(续) “上一条”命令按钮 Private Sub CmdPrevious_Click() adoRst.MovePrevious If adoRst.BOF = True Then adoRst.MoveFirst End If Call Display '显示记录集当前记录 End Sub
结束程序代码 “退出”命令按钮 Private Sub CmdExit_Click() End End Sub
16.4 数据窗体向导 添加数据窗体向导 添加方法 数据窗体向导是作为外接程序存在的 选择VB的“外接程序”菜单下的“外接程序管理器”
使用数据窗体向导 在“外接程序”菜单中选择“数据窗体向导”命令,启动数据窗体向导, 在“连接信息”对话框中,用户需要输入连接数据库的信息。 按向导提示完成后续步骤。