1、第六次上机实践 实验七 应用VB开发简单的数据库应用系统 1 设计数据库 2 设计应用程序界面 。 对数据库进行修改 2 设计应用程序界面 实验七 应用VB开发简单的数据库应用系统 项目:基于Visual Basic/SQL Server的学生信息管理系统 ★学生信息管理系统开发主要包括 ▲后台数据库设计和维护 要求:建立一致性,完整性,安全性好的数据库 工具: SQL Server 2008 ▲前
2、端应用程序的开发 要求:应用程序功能完备,易使用。 工具: Visual Basic ★学生信息管理系统采用C/S(客户机和服务器结构)体系结构,按照客户端设计和教据库设计两部分进行。客户端设计负责提供表达逻辑、显示用户界面信息、访问数据库服务器等,采用Ⅵsual Basic 6.0作为开发工具;服务器端则用于提供数据服务,采用SQL Server 2008作为数据库管理系统。数据库设计实现服务器端的数据处理。 ★客户端系统总体设计 学生信息管理系统客户端主要对学生信息、课程信息、学生成绩信息进行管理,该系统分4个功能模块,如图所示。 1)专业班
3、级管理:包括专业信息和班级信息的录入、修改、删除等操作。 2)学生信息管理:包括学生信息的录入、修改、删除、查询和生成报表等操作。 3)选修课程设置:实现课程信息的录入、修改、删除、查询和生成报表等操作。 4)成绩信息管理:实现学生成绩的录入、修改、删除和查询等操作。录入某个学生的某门课程的成绩时,由于学生信息和课程信息已在数据库中存在,可通过下拉列表框的形式来选择学生和课程来录入、修改、删除和查询成绩。 系统的功能模块图 预备知识 VB基础 一、为什么采用Visual Basic6.0开发数据库 数据库系统(信息管理系统)开发工具很多,早期的如FoxPro等。目前,主流
4、的开发工具有Visual Basic,Visual C++,Delphi等,其中Visual Basic以其简洁易懂的语法,直观而强大的IDE(集成开发环境),丰富强大的数据库操作特性成为最流行的数据库系统开发工具。 在Windows操作系统中,Visual Basic是最简单的数据库开发平台,通过它可以在很短的时间内开发出高效、美观的数据库应用程序。 1)Visual Basic作为数据库开发平台有以下优点: 简单性。Visual Basic提供了数据控件,利用该控件用户可以方便地访问数据库,对数据库进行浏览。 灵活性。Visual Basic不像一般的数据库(如Access)那样局
5、限于特定的应用程序结构,也不需要某些指令对当前打开的数据库进行操作,因而比较灵活。 可扩充性。Visual Basic是一种可以扩充的语言,其中包括在数据库方面的扩充。在Visual Basic中,可以使用Active控件,这些控件可以由Microsoft公司提供,也可由第三方开发者提供。有了这些控件,可以很容易地在Visual Basic中增加新功能。 2)数据库前端是一个计算机应用程序,用该应用程序可以选择数据库中的数据项,并把所选择的数据项按用户的要求显示出来。数据库系统本身被称为后端,后端数据库通常是一个关系表的集合。 选择Visual Basic作为开发数据库前端应用程序的工具
6、主要是因为Visual Basic可以和多种数据库连接。目前,较为流行的大多数数据库都可以与Visual Basic连接,因而可以用Visual Basic开发相应的前端应用程序。 二、VB环境下数据处理功能简介 VB中提供了多种数据库访问方法,可以访问的数据类型有dBase,FoxPro和Access数据库。VB提供的数据库访问方法主要有:使用可视化数据管理器管理数据库,用Data,ADO数据控件访问数据库,通过ODBC方式访问远程数据库以及采用对象变量访问数据库等。 VB提供了多种SQL Server 数据库的访问方法,例如使用数据访问对象(DAO),远程访问对象(RDO),A
7、DO数据控件及ADO对象等。 可视化数据库工具(Visual Dambase Tools)是集成在VB 6.0开发环境中的可视化的数据库管理工具使用这套工具主要可以完成下列功能: 链接到任何符合ODBC(微软公司推出的开放式数据库互联)规则的数据库。 使用数据库图表创建和修改soL Server数据库。 设计、执行和保存复杂的查询。 添加、更改和删除存储在数据库表中的数据 可视化数据库工具(Visual Dambase Tools)主要由数据视图、数据库设计器、查询设计器和源代码编辑器四部分组成。 1数据视图 数据视图的外观与工程窗口十分类似,只是数据视图是用来管理数据库
8、对象的,它提供了一种图形化方法来组织数据库对象,这些数据库对象包括数据库图表、表、视图、触发器和存储过程。用户可以通过双击、拖动及右键菜单对数据库对象执行打开、创建和编辑等操作。 数据绑定控件。 在VB环境下,常用的对象有各种控件、窗体、菜单、应用程序的部件以及数据库等。这些对象都具有属性(数据)和行为方式(方法)。属性用于描述对象的一组特征,方法为对象实施一些动作,对象的动作常常要触发事件,而触发事件又可以修改属性。一个对象建立后,其操作可通过与该对象有关的属性、事件和方法来描述。 数据绑定控件是数据识别控件,在数据库中通过它访问信息,当一个控件被绑定到数据控件控件,该控件将显示
9、数据库中的字段,并接受对数据库的修改。 大多数绑定控件是用DataChanged, DataField, DataSource属性的设置与Data控件绑定的。其中DataChanged属性表明返回绑定控件中的值是否极已经改变, DataField属性用于设置要显示得数据库中的字段名称, DataSource属性用于设置与该控件绑定的Data控件的名称。 实验七 应用VB开发简单的数据库应用系统 2 设计应用程序界面 一、 实验目的 熟悉VB6.0的集成环境及其基本操作: 熟悉VB软件的使用,要求掌握VB的基本功能、常用控件能够运用; 学会对数据控件(Data控件、数据绑定控件
10、等)的使用; 熟悉VB数据访问技术。 二、实验内容 1) VB的启动,对VB集成开发环境(IDE)的熟悉,熟悉工具箱中相应的控件功能及其使用方法。重点掌握数据控件(Data)、数据绑定控件(如文本框、组合框等标准控件)。 三、实验步骤和方法 1) 启动VB程序后,首先显示“新建工程”对话框,如图1所示。 图1.“新建工程”对话框 双击“新建”选项卡中的“标准EXE”选项(默认选项)或在选择了某种工程后,单击“打开”按钮,进入VB的集成开发环境(IDE),如图2所示。当一个应用程序开始创建时,系统会自动为该程序添加一个空白窗体到窗体设计器中。 在设计程序界面时仅需要将
11、工具箱中的相应的控件(部件),画到窗体的适当位置即可。而后编写这些控件的事件代码,即可完成一般性的程序设计过程。 在集成开发环境中集中了许多不同的功能,如程序设计、编辑、编译、调试等,这使用户在一个界面中可以完成多个任务。 图2.VB6.0的集成开发环境 2) 使用ADO控件设计一个数据库浏览程序 在窗体中添加几对标签和文本框和一个ADO控件。 设置标签的Caption属性,文本框的Text属性设置为空。 设置ADO控件的属性:鼠标指向ADO控件,单击右键,选择“ADODC属性”。在“通用”选项卡中选择“使用链接字符串”,单击“生成”按钮,打开了“数据链接属性”对话框,
12、 在“提供者”选项卡中选择 单击下一步,进入“链接”选项卡,在其中选择需要使用的数据库文件,然后单击“测试链接”按钮,验证链接的正确性。单击“确定”按钮完成数据链接属性的设置。 在ADO控件属性页的“记录源”选项卡中,设置命令类型为2(表类型),设置控件的RecordSource属性。 在ADO控件的属性设置完毕之后,设置文本框的DataSource属性和DataField属性。 编写程序代码 Private Sub Text1_Change() a=Adodc1.Recordset.AbsolutePosition b= Adodc1.Recordset.
13、RecordCount Adodc1.Caption=”当前记录号:”& a &”/”& b End Sub 可有如下运行结果: 3) 创建窗体 4) 使用数据视图工具创建数据连接。 点击,打开数据视图窗口: 点击数据视图窗口中工具栏第三个图标“添加新的数据连接”,打开对话框 图 “数据链接属性”列话框 在“提供者”选项卡中选择“Microsoft OLE DB Provider for ODBC Drivers”选项后,单击“下一步”按钮,进入链接选项卡,在其中选择“使用链接字符串”后,单击“编译“按钮。 图 使用字符串创建链
14、接 图 新建机器数据源 在上图所示的对话框中,选择“机器数据源”选项卡,单击其中“新建”按钮。在图14-24所示的对话框中选择数据源的类型,本例选择了“系统数据源”。 选择数据源类型 单击下一步 图 选择数据源的驱动程序 对话框中选择数据源的驱动程序,本例选择了SQL Server,单击“下一步”按钮。 在上图所示的对话框中单击“完成”按钮,启动新的向导程序,该向导用于创建一个能连接到SQL Server的ODBC数据源。(链接到任何符合ODBC(微软公司推出的开放式数据库互联)规则的数据库。) 指定SQL Server所在的服务器
15、名称,该服务器名称为应用程序要登录的数据库所在的服务器名称,参考SQL Server2008登录时的服务器名称。单击下一步。 在上图所示的对话框中,选择登录SQL Server时验证用户身份的方法,本例选择“使用网络登录lD的Windows NT验证”方式。 如果“使用用户输入登录ID和密码的SQL Server验证”,使用这种方法用户需要在每次登录SQL Server时输入用户名和密码。如果选择了“使用网络登录lD的Windows NT验证方式,用 户仅需在启动Windows,并登录Windows NT或2000时输入用户名和密码即可。 在上图所示对话框中选择默认数据库,本
16、例选择了“student”。 在上图所示的对话框中,用户可以选择更改系统消息的语言,这里选择默认值“Simplified Chinese(简体中文)”、是否执行字符数据翻译、曰志文件的设置等。单击“完成”按钮。 在上图对话框中显示,新建ODBC数据源的详细信息,单击测试数据源按钮,可以检测设置的正确性, 单击确定按钮,返回选择数据源窗体, 选择studb数据源,单击确定。此时会出现下所示的对话框 单击确定按钮。此时在数据视图窗口中可以看到该数据库中包含的表、视图和存储过程等信息,如下图所示。 3)使用数据链接访问数据库 在创建了数据链接后,就可以使用该
17、链接来访问SQL Server数据库了,新建一个标准EXE类型VB工程。这里使用数据窗体向导。数据窗体向导可以根据用户的选择自动设置ADO控件和数据绑定控件。在外接程序菜单中打开外接程序管理器,选择“VB6 数据窗体向导”,加载。在外接程序中出现了数据窗体向导选项。启动数据窗体向导。在数据窗体向导中选择 设置文本框的DataSource属性和DataField属性。 5) 运行,调试程序。最后生成一个可执行文件,应用程序设计完成。 体会 ★学生信息管理系统开发主要包括 ▲后台数据库设计和维护 要求:建立一致性,完整性,安全性好
18、的数据库 工具: SQL Server 2008 ▲前端应用程序的开发 要求:应用程序功能完备,易使用。 工具: Visual Basic 6) 完成实验报告 最后一次实践任务:用代码来访问数据库,建立应用程序。 本任务有一定难度,有兴趣同学可选作, 熟悉VB的同学可以选作。 -------------------用代码来访问数据库,建立应用程序 步骤一: 在创建了数据链接后,就可以使用该链接来访问SQL Server数据库了,新建一个标准EXE类型VB工程,执行“工程”菜单“Data Env
19、ironment”命令,将一个数据环境设计器添加到当前工程中。 单击VB工具栏中的“数据视图窗口”工具按钮,打开“数据视图”对话框。将其中的spe_Info表拖放到数据环境设计器中,如下图。 此时在数据环境设计器中自动添加一个链接对象Connection2,该对象中包含有spe_Info表,从窗口可以看到该表中所有字段信息。 鼠标指向数据环境设计器下spe_Info表,单击右键在弹出的菜单中执行属性命令,打开spe_Info对话框。 进入“高级”选项卡,将“游标位置’’设置为“2使用服务器端游标”,将“游标类型设置为2-动态”,将“锁定类型设置为开放式。设置完毕后,单击“确定”
20、按钮,关闭spe_Info属性对话框; 对象属性设置完毕后,在数据环境设计器中将“spe_Info’直接拖放到标准EXE工程的窗体上,系统自动为各字段建立约束控件(数据绑定控件)及对应的标签控件。 ● 观察数据绑定控件的使用。 在上图中,在窗体上有两个文本框,两个标签。将两个标签的Caption属性分别设为“专业号”和“专业名”。 如上图,在窗体上添加3个按钮控件(Command1、Command2、Command13),并放在适当位置,按下面编写按钮控件的事件代码。 Private Sub Command1_Click() On Error GoTo error1
21、DataEnvironment1.rs spe_Info.MovePrevious If DataEnvironment1.rs spe_Info.BOF Then DataEnvironment1.rs spe_Info.MoveFirsr End If Exit Sub error1: MsgBox Err.Description.vbOKOnly, "出错提示" End Sub 退出按钮: Private Sub Command3_Click() End End Sub 程序运行结果如上图。 步骤二: 4)正式设计学生信息管理系统应用
22、程序:界面与代码设计 一、公共模块中定义的全局变量及子程序 1.定义的全局变量 Publlc MyConnection As New ADODB.Connection 用于建立弓数据库的连接 Public SQLUserName As String存放SQL的登录账号 2.ChangeFormPos(frmMain As MDIForm,frm As Form)子过程 功能:用于确定调用窗体在主窗体frmMain中昀显示位置。 Publlc Sub ChangormPos (frmMainAs MDIForm, frm As Form) Dim Top AS Inte
23、ger Top=(FtrmMain.ScaleHeight-frm.Height)/2-600 If Top>0 Then Frm.Top=Top Else Frm.Top=0 End if frm.Ltft=(frmMain. ScaleWidth-frm. Width) /2 End Sub 二、用户登录窗体的设计 用户登录是为了确定该用户是否具备使用系统的权力及访问各模块的权限。该窗体首先完成与数据库的信任连接,并将student数据库的所有SQL Server用户添加到用户名组合列表框中。
24、登录时,用户从列表框中选择用户名,输入密码后,单击“确定”按钮,应用程序将验证用户名和密码,若是合法的SQL Server用,一,则该用户有权进入系统。登录窗体界面如图所示 窗体中的主要控件名称及属性值如表所示: 窗体中主要控件及属性值
25、 ┃ 在窗体frmLogin中,添加以下代码: Dim Myconnection_isOpen As Boolean ‘定义变量用于标记数据库是否连接 PriVate Sub Form Load( ) Dim strConn AS Strinq ‘先以Windows用户连接到SQL Server,获取数据库SQL账户 strConn="provider=sqloledb;integrated security-sspi;”_ + "persist security info=fals
26、e; initial catalog=student; data source= (local)” MvConntction. ConnectionStrinq - strConn On Error GoTo err_Open_msq MyConnection.Open Myconnection_IsOpen =True Call Get UserList Exit Sub err_Open_msq : MsgBox ("Windows用户连接到 SQL Server") End Sub Sub Get_Us
27、erList ( ) ,获取数据库的 SQL账户 Dim obirs As New ADODB.Recordset objrs.CursorType=adOpenKeyset objrs .LockType=adLockOptimistic objrs.Open "select name trom sysusers where issqluser=l",_ MyConnection, , , adCmdText cmbUser . Clear Do Until objrs .EOF
28、 cmbUser . AddItem objrs . Fields ( "name " ) objrs .MoveNext Loop Set objrs=Nothing If cmbUser.ListCount>0 Then cmbUser.ListIndex=0 End Sub Private Sub cmdExit_Click() End End Sub Private Sub cmdOK_Click() ‘重新以SQL用J、1身份连接到SQL Server
29、 Dim strConn As String Dim SQLPassword As String If Myconnection_IsOpen Then MyConnection .Close Myconnection_IsOpen = False End If SQLUserName= cmbUser.Text SQLPassword =txtPwd.Text strConn=”provider=SQLOLEDB.l;uid="&SQLUserName&";pwd="_
30、 &SQLPassword&";database=student;data source=(local)" MyConnection. ConnectionString = strConn On Error GoTo err_msq MyConnection.Open MDIformMain.Show Myconnaction_IsOpen= True Unload Me Exit Sub Err_msg: MsgBox(“SQ
31、L用户不存在,或密码不正确”) End Sub 三、主窗体MDlformMain的设计 主窗体用于定位应用程序的不同部分,为应用程序提供导航功能。本系统采用多文档界面,使用户方便地在各个应用程序之间切换,且多文档窗体还可以少占系统资源。创建主窗体的一般步骤如下所述。 (l)在“工程”菜单中单击“添加MDI窗体”命令,在出现的“添加MDI窗体”对话框的“新建”选项卡中选择“窗体”项,然后单击“打开”按钮。 (2)在“属性”对话框中设置窗体名称为MDIfonnMain,Caption为“学生信息管理系统”,WindowState为2-Maxmized,窗体界面如图所示。
32、 图主窗体MDIformMain的界面 (3)在窗体上单击鼠标右键,在弹出的快捷菜单L选择“菜单编辑器”,打开“菜单编辑器”对话框,按图所示编辑菜单项。 图 菜单编辑器界面 各菜单项标题、名称及单击所执行的命令如表所示。 界面设计完成后,在MDlformMain窗体中添加如下代码: Private Sub MDIForm_Load() '如果以客人身份登录 , 不允许进行班级专业管理 If SQLUserName = "guest" Then mnuSpeClass.Enabled = F
33、alse mnuClass.Enabled = False mnuSpe.Enabled = False End If End Sub Private Sub mnuScore_Click() '进入成绩管理对话框 frmScore.Show ChangeFormPos MDIformMain, frmScore End Sub Private Sub mnuSpe_Click() '进入专业管理对话框 frmSpe.Show ChangeFormPos MDIformMain, frmSpe End Sub Private
34、 Sub mnuClass_Click() '进入班级管理对话框 frmClass.Show ChangeFormPos MDIformMain, frmClass End Sub Private Sub mnuCourse_Click() '进入选修课程管理对话框 frmCourse.Show ChangeFormPos MDIformMain, frmCourse End Sub Private Sub mnuStu_Click() '进入学生信息管理对话框 frmStu.Show ChangeFormPos MDIformMain, fr
35、mStu End Sub Private Sub mnuExit_Click() End End Sub 四、专业管理和班级管理模块的设计 专业班级管理模块主要实现班级和专业的添加、修改和删除等功能。 1.专业管理frmSpe窗口的设计 选择“专业班级管理”中的“专业管理”菜单项,将出现如图所示的frmSpe窗体。 图“专业管理”窗体frmSpe的界面 窗体中的主要控件名称及属性值如表所示。 表 “专业管理”系统菜单标题及名称 在窗体frmSpe中,添加以下代码: Private Sub Form_Load() '初始化窗口 MSFlexGrid
36、1.TextMatrix(0, 0) = "记录" MSFlexGrid1.TextMatrix(0, 1) = "专业编号" MSFlexGrid1.TextMatrix(0, 2) = "专业名称" MSFlexGrid1.ColWidth(0) = 500 MSFlexGrid1.ColWidth(1) = 1000 MSFlexGrid1.ColWidth(2) = 2000 Call Display_Spe '显示所有专业的信息 End Sub Private Sub cmdSpeAdd_Click() Dim sql
37、 As String Dim objrs As ADODB.Recordset If txtSpeNo.Text = "" Then '判断专业编号是否为空,为空则重新输入专业编号 MsgBox "班级编号必须填写!", vbExclamation txtSpeNo.SetFocus Exit Sub End If If txtSpeName.Text = "" Then '判断专业名称是否为空,为空则重新输入专业名称 MsgBox "班级名称必须填写!", vbExclamation txt
38、SpeName.SetFocus Exit Sub End If sql = "insert into Spe_info values('" sql = sql & txtSpeNo & "','" & txtSpeName & "')" On Error GoTo err_Msg_Insert Set objrs = MyConnection.Execute(sql) frmSpe.MSFlexGrid1.Rows = frmSpe.MSFlexGrid1.Rows + 1 frmSpe.MSFlexGrid1.Row =
39、frmSpe.MSFlexGrid1.Rows - 1 frmSpe.MSFlexGrid1.TextMatrix(frmSpe.MSFlexGrid1.Row, 0) = frmSpe.MSFlexGrid1.Rows - 1 frmSpe.MSFlexGrid1.TextMatrix(frmSpe.MSFlexGrid1.Row, 1) = txtSpeNo.Text frmSpe.MSFlexGrid1.TextMatrix(frmSpe.MSFlexGrid1.Row, 2) = txtSpeName.Text Set objrs = Nothi
40、ng GoTo OK_next err_Msg_Insert: MsgBox ("该专业已经存在,不可再添加!") OK_next: Set objrs = Nothing txtSpeNo.Text = "" txtSpeName.Text = "" txtSpeNo.Enabled = True txtSpeName.Enabled = True End Sub Public Sub Display_Spe() '将专业数据填入表格 Dim objrs As New ADODB.Recordset,
41、 i As Integer, str As String Set objrs = MyConnection.Execute("select * from Spe_info") MSFlexGrid1.Rows = 1 Do Until objrs.EOF i = i + 1 MSFlexGrid1.Rows = i + 1 MSFlexGrid1.TextMatrix(i, 0) = i For j = 1 To MSFlexGrid1.Cols - 1 If Not IsNull(objrs.Fields(j
42、 - 1).Value) Then MSFlexGrid1.TextMatrix(i, j) = CStr(objrs.Fields(j - 1).Value) End If Next objrs.MoveNext Loop Set objrs = Nothing End Sub Private Sub cmdSpeAdd_Click() Dim sql As String Dim objrs As ADODB.Recordset If txtSpeNo.Text = "" Th
43、en '判断专业编号是否为空,为空则重新输入专业编号 MsgBox "班级编号必须填写!", vbExclamation txtSpeNo.SetFocus Exit Sub End If If txtSpeName.Text = "" Then '判断专业名称是否为空,为空则重新输入专业名称 MsgBox "班级名称必须填写!", vbExclamation txtSpeName.SetFocus Exit Sub End If sql = "insert into Spe_i
44、nfo values('" sql = sql & txtSpeNo & "','" & txtSpeName & "')" On Error GoTo err_Msg_Insert Set objrs = MyConnection.Execute(sql) frmSpe.MSFlexGrid1.Rows = frmSpe.MSFlexGrid1.Rows + 1 frmSpe.MSFlexGrid1.Row = frmSpe.MSFlexGrid1.Rows - 1 frmSpe.MSFlexGrid1.TextMatrix(frmSpe.
45、MSFlexGrid1.Row, 0) = frmSpe.MSFlexGrid1.Rows - 1 frmSpe.MSFlexGrid1.TextMatrix(frmSpe.MSFlexGrid1.Row, 1) = txtSpeNo.Text frmSpe.MSFlexGrid1.TextMatrix(frmSpe.MSFlexGrid1.Row, 2) = txtSpeName.Text Set objrs = Nothing GoTo OK_next err_Msg_Insert: MsgBox ("该专业已经存在,不可再添加!") OK_ne
46、xt: Set objrs = Nothing txtSpeNo.Text = "" txtSpeName.Text = "" txtSpeNo.Enabled = True txtSpeName.Enabled = True End Sub Private Sub cmdSpeUpdate_Click() Dim sql As String Dim objrs As ADODB.Recordset If txtSpeNo.Text = "" Then '判断班级编号是否为空,为空则重新输入班级编号
47、 MsgBox "班级编号必须填写!", vbExclamation txtSpeNo.SetFocus Exit Sub End If If txtSpeName.Text = "" Then '判断班级名称是否为空,为空则重新输入班级名称 MsgBox "班级名称必须填写!", vbExclamation txtSpeName.SetFocus Exit Sub End If sql = "update Spe_info set Spe_Name='" sql = sql & txtS
48、peName & "' where Spe_No='" & txtSpeNo & "'" On Error GoTo err_Msg_Update Set objrs = MyConnection.Execute(sql) frmSpe.MSFlexGrid1.TextMatrix(frmSpe.MSFlexGrid1.Row, 1) = txtSpeNo.Text frmSpe.MSFlexGrid1.TextMatrix(frmSpe.MSFlexGrid1.Row, 2) = txtSpeName.Text Set objrs = Nothi
49、ng GoTo OK_next err_Msg_Update: MsgBox ("更改数据出错或没有更改权限!") OK_next: Set objrs = Nothing txtSpeNo.Text = "" txtSpeName.Text = "" txtSpeNo.Enabled = True txtSpeName.Enabled = True End Sub Private Sub cmdSpeDelete_Click() Dim sql As String Dim objrs As ADODB.R
50、ecordset If MsgBox("确定要删除专业编号为" & MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 1) & _ ",专业名称为:" & MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 2) & _ "的记录吗?", vbOKCancel + vbQuestion, "删除记录") = vbOK Then On Error GoTo err_Msg_Delete Set objrs = MyConnection.E






