1基于VB的桌面系统开发方案ADO和记录集2课题目标了解ADO的优点使用ADO数据控件访问数据3回顾属性、方法和事件有效性验证创建菜单回顾数据控件的属性、方法和事件回顾MDI应用程序的创建4OLE数据库不同的数据库管理系统(DBMS)使用不同的格式存储数据–MicrosoftAccess的文件格式是‘mdb’,而FoxPro的文件格式是‘dbf’–如果要从一个DBMS换为另外一个DBMS重新编写应用程序来适应新的数据格式必须花费大量的时间和精力来重新编写应用程序5问题在早期的计算应用中,处理数据库中数据的方式:–针对某种类型的数据库专门编写的应用程序–DBMS本身–例如:对使用Oracle(一种DBMS)数据库来存储的数据可以使用下面的方法来进行访问:PL/SQLSQL*Plus6解决方案把和数据库的交互部分从应用程序中分离出来通过在应用程序和DBMS之间使用不同的“解释器”,就可以实现应用程序和不同DBMS创建的数据库的“对话(交互)”应用程序‘翻译器’数据库7开放式数据库连接(ODBC)ODBC定义了一个标准方法用来实现在应用程序和DBMS之间的交互它是通过定义应用程序编程接口(API)来实现的API这个术语是指一组用来完成特定功能的函数的集合。应用程序可以通过调用一个API函数来完成一个特定的任务8开放式数据库连接(续)API调用被传递到“解释器”“解释器”使用相应的DBMS语言的命令来确定对数据库的操作‘解释器’实质上就是ODBC驱动器–它用来实现不同的API,使之能被DBMS理解–因此它是一个每个DBMS都能访问的驱动器–ODBC驱动器接受从应用程序发送来的命令,然后把命令转换为DBMS能理解的格式9OLEDBOLEDB定义一组COM(组件对象模型)接口来实现对不同DBMS中存储的数据的一致访问问题–由于OLEDB定义了接口,它位于底层,只能由像C++这样的OO语言直接实现–不能使用象VisualBasic这样的高层4GL语言来实现解决方案–微软已经通过提供ActiveXDataObjects(ADO)来解决这个问题10ADO简介分布式应用程序有两个部分:–前端部分要求的资源很少运行在客户端的工作站上–后台部分要求大量的数据特殊的硬件设备运行在服务器上客户端和服务器间的连接允许数据在它们之间双向流动11VisualBasic中的数据访问VisualBasic提供了三种数据访问界面:–数据访问对象(DAO)–远程数据对象(RDO)–ActiveX数据对象(ADO)12数据访问对象(DAO)VisualBasic第3版本中提供了DAO它允许访问和操作本地数据库它不能用来访问远程的数据库13远程数据对象(RDO)它是在VisualBasic第4版本中提出来的用来访问远程数据库它在访问如MSSQLserver和Oracle这样的关系数据库时非常有效它不能有效地访问桌面数据库14ActiveX数据对象(ADO)它是在VisualBasic第6版本中引入的它提供到按任何格式存储的任何数据库的访问ADO是对旧的DAO和RDO的一个取代15使用ADO数据控件来访问数据以很少的代码来创建一个数据访问应用程序提供了–可视的界面来设置数据访问的属性–它提供了一个从应用程序到我们要访问的数据的连接–只需通过绑定控件到ADO数据控件就可以在窗体中显示数据16一旦控件被设置了数据源属性后就被绑定到ADO数据控件这样的控件包括–复选框(CheckBox)–组合框(ComboBox)–图像(Image)–标签(Label)–列表框(ListBox)–图片框(PictureBox)–文本框(TextBox)使用ADO数据控件来访问数据–DataCombo–DataGrid–HierarchicalFlexGrid–DataList–MaskedEdit–RichTextBox17添加ADO数据控件。在工具箱中添加ADO数据控件–通过“工程(Project)”菜单项的“部件(Components)”子菜单项,再选中选项‘MicrosoftADODatacontrol6.0’最后一个记录下一个记录上一个记录第一个记录18连接到数据源设置ADO数据控件的连接字符串(ConnectionString)属性–创建到数据源的连接–给出了将要访问的数据库的位置和类型–在ADO数据控件的属性窗口中单击ConnectionString属性旁的浏览按钮就可以设置这个属性19连接到数据源(续)20连接到数据源(续)使用数据连接文件–这个选项指定一个连接到数据源的自定义的连接字符串–单击旁边的“浏览”按钮可以选择一个连接文件使用ODBC数据源名称–这个选项允许使用一个系统定义好的数据源名称(DSN)来作为连接字符串–可以在组合框中的数据源列表中进行选择,使用旁边的“添加”按钮可以添加或修改DSN21连接到数据源(续)使用连接字符串–这个选项定义一个到数据源的连接字符串–单击“生成”按钮弹出“数据连接属性”对话框–在这个对话框中可以指定提供者的名称、连接以及其它的要求信息22连接到数据源(续)23连接到数据源(续)24记录源(RecordSource)属性在建立到数据库的连接之后,记录源属性指定记录从何而来属性指定为一个–表的名称–存储过程–SQL语句25记录源属性(续)使用SQL语句是一个很好的练习,因为它只从表中检索出满足条件的行而不是整个表类型说明AdCmdUnknown未知命令,缺省值。AdCmdText允许在命令文本框中指定一个SQL命令AdCmdTable罗列所连接到的数据库中的表名。AdCmdStoredProc显示数据库中所有可能的查询和存储过程。26绑定控件到ADO数据控件数据源属性–把控件绑定到数据库的ADO数据控件如:假设一个窗体有一个文本框和一个连接到Northwind数据库中顾客(Customers)表的ADO数据控件为了能看到顾客(Customers)表中的数据,就必须把文本框绑定到数据源ADO数据控件27绑定控件到ADO控件(续)数据域(DataField)属性–指定数据源中要求的域。–如:为了看到所有顾客的名称,把绑定到ADO数据控件的文本框的数据域属性设为顾客(Customers)表中表示名称的相应的域单击位于ADO数据控件上的按钮时,所有绑定到ADO数据控件的控件就会显示相应的当前记录的信息28绑定控件到ADO控件(续)所有在绑定的控件上做的修改也会相应的写回到数据库中下列VisualBasic工具箱中的控件是可以绑定到ADO数据控件的:图片框标签文本框复选框组合框列表框图片OLE控件29绑定控件到ADO控件(续)控件说明DataGrid对从数据源得到的记录和域以多重行和列的方式显示并允许对之进行操作DataCombo自动从连接的数据源的一个域产生的绑定的组合框DataList自动从连接的数据源的一个域产生的绑定的列表框HierarchicalFlexGrid对包含字符和图片的表给予完全的自由去进行排序、合并和格式化MaskedEdit对输入数据进行限制,同时也对输出数据进行格式化RichTextBox允许用户输入和编辑文本,同时提供比标准文本框控件更为高级的格式化功能30DataCombo和DataList控件DataCombo和DataList控件–DataList和DataCombo控件能给数据库程序带来更大的灵活性和方便–能够自动从绑定的数据控件中的数据域中填充数据–通过选择“工程(Project)”菜单项中的“部件(Components)”子菜单项,选中“MicrosoftDataListControls6.0(OLEDB)”选项,才能把它们添加到工具箱中31创建记录集Recordset(记录集)对象–表示一个表中所有的记录或者一个已执行命令的结果的对象。–用来访问查询返回的记录–总是指向查询返回记录集中一个记录,该记录被称之为当前记录使用记录集对象可以对数据库中的数据作如下操作:–插入记录–修改记录–删除记录–查找特定记录32插入记录AddNew方法–向记录集中添加新的记录–当插入一条新的记录时,绑定的控件会清空控件中的信息以便接受新记录的信息adoEmployees.Recordset.AddNew这条新插入的记录成为当前记录当移动到其他记录时,新记录被加到数据库中CancelUpdate方法–可以取消在记录上做的任何修改–语法:adoEmployees.Recordset.CancelUpdate33修改记录移动到想修改的记录,并做必要的修改,然后移到下一个记录,这时ADO数据控件会自动地修改记录Update方法–对当前记录进行修改adoEmployees.Recordset.Update34删除记录Delete方法–删除一个记录。adoEmployee.Recordset.Delete记录从数据库中被移走在绑定的控件中还是会显示这个记录的信息直到我们把当前记录指针移到其它记录上35查找记录Find方法–查找满足指定查询条件的记录–语法:object.Find(criteria,skiprows,searchdirection,start)36查找记录(续)参数说明Criteria一个字符串,它包含一条语句用来指定查找中使用到的列名、比较操作符(,,=或者LIKE子句)以及限定值Skiprows可选,缺省为零。用来指定到当前行或是‘start’参数指定的开始行的偏移量。Searchdirection可选,指定检索的方向。它的值可以是adSearchForward(向前检索)和adSearchBackward(向后检索)。start可选,指定查询的起始位置。它的值可以是adBookmarkCurrent(从当前记录开始查询)、adBookmarkFirst(从第一个记录开始查询)和adBookmarkLast(从最后一个记录开始查询)。37查找记录(续)下面语句中使用了Find方法的四个参数来查询一个名叫‘David’的雇员的信息:adoEmployee.Recordset.Find_“Emp_name=‘David’”,0,_adSearchBackward,adBookmarkCurrent38本课总结OLEDB定义一组COM(组件对象模型)接口来实现对不同DBMS中存储的数据的一致访问ADO数据控件提供到OLEDB的接口应用ADO数据控件