ActiveX数据对象VB.doc_第1页
ActiveX数据对象VB.doc_第2页
ActiveX数据对象VB.doc_第3页
ActiveX数据对象VB.doc_第4页
ActiveX数据对象VB.doc_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ActiveX数据对象 ActiveX数据对象 一.用ActiveX数据对象创建Visual BasiC应用程序31.理解OLE DB/ADO结构42.在Visual Basic应用程序中安装和创建对ADO的引用63.使用ADO的Connection对象连接到某数据源7(1).指定OLE DB提供者和连接字符串8(2).用临时表工作9(3).决定提供者所支持的临时表和其他功能11(4).在ADO编程时使用VB的智能化功能12(5).ADO中的记录锁12(6).打开和关闭到某数据源的连接134.使用ADO Recordset对象来操作数据145.利用Recordset对象插入和更新记录176.创建无连接记录集227.使用ADO Command和Parameter对象执行查询288.利用ADO的Field对象访问记录集数据309.利用ADO的Errors集合处理错误3110.利用Propemes集合查看提供者指定的属性32二.数据访问341.用Field对象操作字段34(1).对Field对象的引用35(2).复制一个字段36(3).将整个记录复制到数组中362.结合Recordset对象使用定位方法41(1).使用BOF和EOF遍历记录集42(2).使用BOF和EOF来确定一个记录集是否为空44(3).使用RecordCount属性来确定记录集中记录的条数44(4).当前记录在记录集中的位置45(5).改变记录的值46(6).用AddNew 和Update方法创建新记录47(7).用AppendChunk向Binary字段追加数据50(8).用Close方法关闭Recordset513.搜索记录集和表中的数据514.使用Bookmark属性记录你在Recordset中的位置54在Visual Basic 6.0中,ActiveX Data Objects(ADO)占据着更重要的位置,并且功能更强大。你不仅仅可用ADO通过Web页面访问数据库,也可以用它从Visual Basic应用程序中获取你需要的数据。ADO除了是数据库访问的另外一个对象模型外,还是一种新近出现的数据技术OLE DB的面向对象接口。OLE DB是用来替代ODBC的访问数据的方法。ODBC现在是普遍的访问关系列数据的Windows客户方标准,原因是它使关系数据库对于客户方应用程序尽可能地通用。OLE DB则尝试想更进步,让所有的数据源都通用于客户方应用程序。一. 用ActiveX数据对象创建Visual BasiC应用程序Microsoft ActiveX Data Objects(ADO)是个类似于Data Access Objects(DAO)和Remote Data Objects(RDO)的面向对象的数据库访问技术。它是Microsoft的Universal Data Access的一部分,目的是让所有数据源看起来一样。就象利用ODBC使所有关系型数据源通用一样。提示如想获得Microsoft的Universal Data Access的最新信息,可以下载包含ActiveX Data Objects的文件,你还可以查看/data/上有关Data Access Components Web页面。如想了解有关ActiveX Data Objects更详细的信息,则可访问/data/ado。ADO现在被Microsoft定位为一种从Web服务器访问数据库的技术。由于ADO是以ActiveX Server库的形式提供的(跟DAO及RDO一样),你完全可以在Visual BasiC应用程序中使用ADO。实际上,在许多方面,你将发现使用ADO能更容易地访问clientserver应用程序。虽然ADO是一种较新的数据库访问技术,帜它的性能完全可以与RDO匹敌。本文的第一部分着重介绍如何用ADO创建传统的Visual Basic应用程序,其中包括对ADO对象模型的讨论。1. 理解OLE DB/ADO结构大多数Visual Basic开发者从不直接与OLE DB打交道。相反地,他们编程时使用ADO,该对象模型提供对OLE DB的接口。它的结构在图1中介绍。图1. 该图演示如何使用ADO和OLE DB访问数据库中信息的过程注释如果你理解数据“提供者”(Provider)这一概念有困难的话,你可以简单地认为它是“驱动程序”(driver)。当你把ODBC和OLE DB体系结构一起比较时,你会发现两者从角色角度来讲在概念上是相似的。OLE DB提供者不象ODBC驱动程序那么多,但当ADO 20在1998年颁布后,OLE DB提供者的数目增长幅度很快。该ADO版本(已包含于VisualBasic 60中)包括SQL Server、Oracle和Microsoft JetAccess天生的提供者。你很有可能将能够使用ADO和OLE DB访问关系型数据源,即使它们没有天生的OLE DB提供者。那是因为ODBC关系数据库有一个通用的OLE DB提供者。该结构(看起来相当今人费解)将在图2中演示。 Microsoft已经说ADO主要用于Internet,具有在不经常重引导的服务器上同时服务大量用户的能力。在Web应用程序中使用ADO最简单的办法是用Active Server Page形式。图2. 使用ODBC OLE Db提供者访问ODBC数据库的体系结构由于你也可以通过应用程序或内置于Visual Basic的ActiveX组件中访问ADO,你也可以创建单一的途径来访问数据和可从Visual Basic中及Web应用程序中访问的商业逻辑。图3即演示了这种体系结构。在这种情形下,所有与商业相关的逻辑处理均放在类模块中,并且以ActiveX组件的形式编译。这样一来,存在于客户方的代码量比较少。由于Web浏览器和VB应用程序的数据访问均通过ActiveX服务器,你可以确信程序逻辑始终一致,不管使用何种应用程序。2. 在Visual Basic应用程序中安装和创建对ADO的引用在你开始在Visual Basic应用程序中操作ADO之前,ADO必须已经女装在计算机上。ADO般是Visual Basic 6.0正常安装的一部分。注释ADO是随着V1sual Basic 6.0一起安装的。如果想获得它的最新版本,你可以从Microsoft Web站点自由下载,地址为:/dota/ado。每当Microsoft颁布更新内容和ADO的附加功能时,你均能从Web站点下载它们。而且,你要记住:ADO可以在任何能处理ActiveX/COM对象的开发环境中使用,包括Visual Basic、Visual C+、Microsoft Office程序组和Active Server Pages Web脚本化。图3. 该体系结构允许你在Web浏览器和Visual Basic客户应用程序中使用通用的ActiveX代码组件如果ADO已经安装在计算机上,你可以在VB应用程序引用该ADO库。然后开始使用它, 就象引用DAO或RDO库一样。具体步骤如下:1) 在Visual BaSic项目中,选择工程引用。2) 这时,“引用”对话框出现。3) 选中Microsoft ActiveX Data ObJects 2.0 Library,然后单击“确定”。现在你可以在代码中使用ADO了。在项目中引用ADO库时,一定要确保你没有引用Microsoft ActiveX Date Objects 2.0 Recordset库。这是被设计用于client/server应用程序中客户方的早期ADO库版本。它只支持Recordset和Field对象。如果你发现自己不能在ADO应用程序中初始化Connection或Command对象的话,这可能就是原因所在。3. 使用ADO的Connection对象连接到某数据源在ActiveX Data Objects中,你可以使用Connection对象来建立到某数据源的连接。同时,正如后面示例代码所演示的那样,你不必使用Connection对象与ADO完成有益的工作ADO的这一点比RDO优秀,而后者更依赖于Connection对象。在ADO对象模则中,ADO Connection对象、属性和方法的地价如图4所示。图4. 在ADO对象的上下文中,ADO Connection对象的属性和方法你可以使用ADO Connection对象的Open力法建立与数据源的连接。为了告诉ADO如何去访问数据源,你必须以与ODBC连接字符串相同的格式提供有关信息。你可以使用Connection对象的ConnectionString属性来实现。你也可以通过设置Connection对象的Provider属性来选择你想使用的提供者。本文以下几节内容将给出如何实现这些的示范代码。(1). 指定OLE DB提供者和连接字符串你可以使用ADO Connection对象的Provider属性来指定OLE DB提供者。该属性告诉ADO将使用哪个OLE DB提供者来执行服务器命令(如果你没有指定提供者,或者你没有使用Connection对象,则你所用的是缺省提供者,该提供者是OLE DB的ODBC提供者,也称作MSDASQL)。Connection对象的Provider属性是个文本字符串,其中该字符串被用于指明连接时使用哪个OLE DB提供者,原因是ODBC提供者是缺省的。然而如果为了更明确的话,你可以指定它。你在ADO中使用的ConnectionString可以提供有关如何与数据库服务器连接的信息。当你正在使用OLE DB的ODBC提供者时,该连接字符串与ODBC连接字符串样。这意味着ODBC驱动程序期望的准确信息可以根据不同的实现而变化。对于其他提供者来说,连接字符串可能是完全不同的语法。当你正在使用ODBC提供者时,ConnectionString属性可能是个数据源名称(DSN)或者DSNLess连接。下面的例子即为使用带有DSN的ODBC提供者与数据库的连接:cn.Provider = MSDASQLcn.ConnectionString = DSN=Novelty”连接字符串中的DSN显然要求名称为Novelty的DSN必须真正存在于客户方的计算机上。下面例子告诉Connection对象使用Microsoft Jet OLE DB提供者。对于Jet提供者,连接字符串是MDB文件的路径和文件名(使用Microsoft Access数据库)。cn.Provider = microsoft.jet.oledb.3.51cn.ConnectionString = D:novelty.mdb 为了使用ADO和ODBC提供者连接到一个安全保护的数据库,你必须通过Connection对象的Properties集合提供额外的信息。这种信息通常包括用户名和口令。以下即为如何在ADO中设置这些值的例子:cn.Provider = MSDASQLcn.ConnectionString = DSN=Noveltycn.Properties(Password) = cn.Properties(User ID) = sacn.Open 为连接到SQL Server数据库,你应使用提供者SQLOLEDB.1:cn.Provider = SQLOLEDB.1cn.ConnectionString = _DATABASE=novelty;SERVER=toshiba;UID=sa;PWD=; 或者cn.ConnectionString = DRIVER=Sql Server;DATABASE=novelty;_SERVER=toshiba;UID=sa;PWD=;注意在这种情况下,SQL Server的连接字符串跟DSN-Less ODBC连接字符串相同,差别只在于DRIVER参数;为连接到Oracle,你应使用ORACLE驱动程序,名称为MSADORA:cn.Provider = ”MSADORA”cn.ConnectionString = ”user/mypassservicename”注意,对于Oracle驱动程序而言,连接字符串是个标准的Oracle连接字符串,其中包含有用户名、口令和服务器名称。你也可以通过向Connection对象的Open方法提供服务器、用户名和口令而登录到Oracle。Dim cn As ADODB.ConnectionSet cn = New ADODB.Connectioncn.Provider = MSADORAcn.Open SERVER,USERID,PASSWORD你也可以给Recordset对象的Open力法分配连接字符串,这点将在本文后面内容“使用ADO Recordset对象操作数据”中介绍。(2). 用临时表工作就象在RDO和DAO中样,ADO提供了对许多临时表类型的支持,包括同时定位记录集中某记录的支持,不同类型的临时表允许你控制如何管理记录集。通过给Recordset对象的CursorLocation属性分配值,你可以设置临时表的位置。表1给出对ADO Connection对象有效的临时表类型。表 1. ActiveX Data ObJects中有效的临时表类型临时表类型常 量描 述客户机端adUseClient在客户机端创建临时表服务器端AdUseServer在服务器端创建临时表选择客户方临时表意味着由ADO和OLE DB处理临时表操作。客户方临时表经常具有服务器端临时表所没有的功能。比如,在ADO中,你可以创建个无连接的记录集,即允许你操作与服务器没有永久性连接的记录。该能力是客户方临时表库提供的功能。在ADO中,CursorLocation属性适用于Recordset和Connection对象。如果你分配Connection对象的CursorLocation属性,则你从该连接创建的所有记录集与相关的Connection对象具有相同的临时表位置。除指定临时表位置外,你还有能力用ADO创建四个不同类型的临时表。你对临时表的选择一般应本着均衡功能和性能的原则。通过分配Recordset对象的CursorType属性,你可以指定一个临时表类型。表2列出的即为你可以用ADO创建的临时表类型。表 2. 使用ADO Recordset对象时有效的临时表类型临时表类型常 量描 述Forward-onlyadOpenForward没有临时表只能在记录集中往前移动;MovePrevious和MoveFirst方法会产生错误。Keyset(在DAO中称作Dynaset)dbOpenKeyset你不能看到其他用户添加到记录集汇总的记录,但其他用户进行的更新和删除操作会影响记录集;可能是效率最高的临时表,尤其当记录集很大时更是如此。DynamicdbOpenDynamic当记录集处于打外状念时,你可以看到其他用户对数据所作的任何修改;这是效率最低,但功能最强的临时表。Siatic(在DAO中称作Snapshot)dbOpenStatic记录集中所有数据的一个拷贝;当你查找数据或者运行报告时尤其有用处;记录集很小时可能很有效。当然,你选择Forward-only临时表,而不是Keyset或Dynamic临时表的理由是性能如果你只想处理或打印存储在数据库中的数据项列表的话,Forwardonly临时表就地够了,并且性能更好。注意,如果数据提供者不能提供你期望的临时表类型,则它将创建它能创建的临时表类型。一般。它不会产生一个错误,除非你尝试做当前临时表禁止的事情(比如、对Forward-only临时表实施MovePrevious方法)。下节内容将介绍每种提供者所支持的临时表。(3). 决定提供者所支持的临时表和其他功能由于OLE DB和ADO被设计用于访问多方面的数据源,所以应用程序可能需要了解特定提供者所支持的功能。可能会存在如下情况:企业关系型数据库管理系统或许允许你创建一个服务器端、Forward-only临时表,而桌面或基于文件的数据库却可能不能。ADO Recordset对象的Supports方法决定某数据提供者所支持的游标。表3是你可以传递给Supports方法的有效值,以决定特定Recordset对象所支持的功能。表 3. Support方法所使用的常量常 量描 述adAddNew新记录可以添加到记录集adApproxPositionAbsolutePage和AbsolutePosition属性有效;它们与Recordset对象的PageSize和PageCount属性一起使用,你可以依此决定当前记录所处的页面addBookmark可以在记录集中设置书签adDelete可以从记录集中删除记录adHoldrecords无须提交已有的更改,可以从数据库中查询记录adMovePrevious记录集可以向后滚动adResyncadResync方法有效adUpdate记录集可以更改adUpdatebatch借助于UpdateBatch方法,记录集可以被成批处理。借助于批处理,你可以在一个操作中提文对多个记录的修改,这样就提高了客户机/服务器性能比如,为了决定某数据提供者是否有能力提供个滚动临时表,你可以使用如下表达式:rsSupports(adMovePrevious)在此,rs是Recordset对象。如果表达式结果为Ture,则该数据提供者支持滚动临时表。(4). 在ADO编程时使用VB的智能化功能相对于其他数据库访问对象模型,ADO的一个优点是它的常量能被显式地罗列出来。对于VB开发者而育,这意味着当你在集成开发环境中编写代码时,你可以得到有关常量的下拉列表。图5即为一例。如图所示,当你用ADO输入代码时,如果你想使用对象的方法或者决定哪个常量适宜时,你不必每次都按下F1寻求帮助,系统会自动地给出相关常量或方法的列表,你可以从中选择。图5. 图中即ADO提供的极其有用的常量列表考虑到在Visual Basic中该功能的普及性,对于一些开发者来说,自动呈现的下拉列表会让他更乐意采用ADO。(5). ADO中的记录锁象其他数据库访问对象模型一样,ADO允许你设置不同类型的记录锁方式。在控制多用户更新数据库中记录的情况下,可以设置适宜的锁。你可以通过设置ADO Recordset的LockType属性设置锁方式。表4列出四种有效的记录锁。表 4. ADO LockType属性有效的记录锁方式常 量描 述adLockReadOnly不允许对记求集作修改adLockPessimistic保守式锁。当记己录编辑开始时,该锁启动,记录集中该记录被锁住,并且锁会保持到你执行Update方法或者移到其他记录时才解除adLockOptimistic开放式锁。只有当你执行Update方法时或者移列其他记录的瞬间才启动锁,并且更改操作完成后立即解除adLockBatchOptimistic开放式批处理锁。对同时更新多个记录提供支持你定要认识到:ADO中缺省锁力式是adLockReadOnly。这是ADO和DAO编程间其中一个最重要的区别,因为在DAO中,缺省条件下记录集是可编辑的。这意味着如果你未曾设置LockType和CursorType属性的话,则ADO记录集将始终是只读的。不同类型锁的有效性依赖于数据提供者的支持内容。借助于Recordset对象的Supports方法(本文前面已介绍),你可以决定提供者是否支持某特定类型的锁。你也应当记住,ADO记录集可以与它们的数据源断开连接。这一点将在本文后面的“创建无连接的记录集”中讨论。(6). 打开和关闭到某数据源的连接为了使用ADO对数据源发送命令,你应打开到该数据源的连接。一般,你可以使用ADO Connection对象的Open方法来实现。当你完成对数据源的操作后,你应使用该Connection对象的Close办法来关闭之。下面即为ADO Connection对象Open方法的语法:cn.OpenConnect,userid,passwordOpen方法的所有参数都是可选的。如果你末给Open方法提供一个连接字符串作为参数的话,你可以通过Connection对象的ConnectionString属性来提供。效果是样的。连接字符串的语法是由提供者决定的。程序清单1中的例子是使用ADO Connection对象而打开到ODBC数据库的连接。程序清单1. 使用ADO Connection对象而打开到数据源的连接Option ExplicitReferences ADO 2.OPrivate cn As ADODB.ConnectionPrivate Sub Form_Load() Set cn = New Connection cn.Open PROVIDER=MSDASQL;DSN=Novelty;UID=sa;PWD=;End Sub这段代码假设你已经在计算机上建立一个名为Novelty的ODBC数据源(DSN)。当你操作完ADO Connection对象后,你应使用它的Close方法来关闭之;Cn.Close显式地关闭到数据源的连接可以保证任何与该连接相关的资源(在客户方或服务器上,或两者都有)都及时地得到释放。4. 使用ADO Recordset对象来操作数据ADO的Recordset对象,类似于DAO的Recordset和RDO的Recordset对象,是访问来自数据提供者的信息的方式。ADO的Recordset对象与其他对象模型的Recordset对象具有许多相同的属性和方法,所以你可以相同的方式处理。ADO Recordset对象在ADO对象模型中的位置,以及它的属性和方法,你均可以在图6中看到。创建ADO Recordset对象的过程很类似于创建RDO rdoResultset的过程。然而,、ADO有个很有趣的地方:有能力创建一个不需要隐式Connection对象的Recordset对象(这不同于拥有一个无连接记录集连接确实存在,只是没有表示它的对象变量而已)。举个例子,程序清单2演示了如何以传统方式创建个ADO Recordset对象。该技术对于RDO程序员来说很熟悉首先创建一个Connection对象,然后通过给该Connection对象的Exexute方法传递一个SQL查询而运行一个相对于连接的查询。图6. 存在于ADO对象模型中ADO Recordset对象的属性和方法程序清单2. 使用connection和Recordset对象创建一个ADO Recordset对象Option ExplicitReferences ADO 2.OPrivate cn As ADODB.ConnectionPrivate Sub cmdQueryCN_Click() Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset rs.Source = select * & _ from tblCustomer & _ where State=DE & _ order by Lastname,Firstname Set rs.ActiveConnection = cn rs.Open lstData.Clear Do Until rs.EOF lstData.AddItem rs.Fields(FirstName) & & _ rs.Fields(LastName) & , & _ rs.Fields(Address) rs.MoveNext LoopEnd SubPrivate Sub Form_Load() Set cn = New ADODB.Connection cn.Open PROVIDER=MSDASQL;DSN=Novelty;UID=sa;PWD=;End SubPrivate Sub Form_Unload(Cancel As Integer) cn.Close Set cn = NothingEnd Sub注释创建ADO Recordset的命令字符串可能是表名、存储查询的名称或者SQL语句它和DAO中OpenRecordset方法的运行方式相同。作为该技术的替代,ADO允许你无需事先创建Connection对象就可创建Recordset对象。对于这一点,你可以通过给Recordset对象的Open方法传递一个连接字符串而实现。代码如程序清单3所示:程序清单3. 无须首先创建一个ADO Connection对象,你就可以创建ADO Recordset对象Option ExplicitReferences ADO 2.OPrivate rs As ADODB.RecordsetPrivate Sub cmdQueryRS_Click() Set rs = New ADODB.Recordset rs.Source = select * & _ from tblCustomer & _ where State=DE & _ order by Lastname,Firstname rs.Open , PROVIDER=MSDASQL;DSN=Novelty;UID=sa;PWD=; lstData.Clear Do Until rs.EOF lstData.AddItem rs.Fields(FirstName) & & _ rs.Fields(LastName) & , & _ rs.Fields(Address) rs.MoveNext LoopEnd SubPrivate Sub Form_Unload(Cancel As Integer) rs.Close Set rs = NothingEnd Sub 5. 利用Recordset对象插入和更新记录在ADO中完成记录的插入和更新差不多跟在DA0中样,为了插入一个记录,可以遵循以下步骤:1) 打开个记录集。2) 执行该Recordset对象的AddNew方法。3) 给Recordset对象中的字段分配值。4) 通过执行该Recordset对象的Updata方法以保存该记录。为了使用ADO Recordset对象更新已有的记录,可以遵循如下步骤:1) 打开一个记录集。2) 给该Recordset对象中的字段分配值(注意,当你在DAO中这样做时你不必执行Recordset对象的Edit方法ADO则不然)。3) 通过执行该Recodset对象的Update方法以保存该记录。演示输入和更新记录的应用程序允许用户首先把雇员数据放到个列表框。然后选择一个特定雇员来编辑。当运行时,应用程序的外观类似于图7:图7. 该比用秤序演示输入和电斯记录程序清单4中为该应用程序的代码:程序清单4. 利用ActiveX Data Objects更新记录 Option Explicit References ADO 2.0Private cn As ADODB.ConnectionPrivate mrsCust As ADODB.RecordsetPrivate Sub Form_Load() Set cn = New ADODB.Connection cn.ConnectionString = _ PROVIDER=MSDASQL;DSN=Novelty;UID=sa;PWD=; cn.Open Set mrsCust = New ADODB.Recordset mrsCust.LockType = adLockOptimistic mrsCust.CursorType = adOpenKeysetEnd SubPrivate Sub cmdList_Click() Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset rs.Source = select * & _ from tblCustomer & _ where State = DE & _ order by LastName, FirstName Set rs.ActiveConnection = cn rs.Open lstData.Clear Do Until rs.EOF lstData.AddItem rs.Fields(FirstName) & & _ rs.Fields(LastName) lstData.ItemData(lstData.NewIndex) = rs.Fields(ID) rs.MoveNext Loop rs.Close Set rs = Nothing End SubPrivate Sub lstData_Click()Dim strSQL As String strSQL = select * & _ from tblCustomer & _ where ID = & lstData.ItemData(lstData.ListIndex) mrsCust.Source = strSQL Set mrsCust.ActiveConnection = cn mrsCust.Open txtFirstName.Text = mrsCust.Fields(FirstName) txtLastName.Text = mrsCust.Fields(LastName) txtAddress.Text = mrsCust.Fields(Address) txtCity.Text = mrsCust.Fields(City) mrsCust.Close End SubPrivate Sub cmdSave_Click()Dim strSQL As String strSQL = select * & _ from tblCustomer & _ where ID = & lstData.ItemData(lstData.ListIndex) mrsCust.Source = strSQL Set mrsCust.ActiveConnection = cn mrsCust.Open mrsCust.Fields(FirstName) = txtFirstName.Text mrsCust.Fields(LastName) = txtLastName.Text mrsCust.Fields(Address) = txtAddress.Text mrsCust.Fields(City) = txtCity.Text mrsCust.Update mrsCust.Close Refresh list of customers cmdList_Click End SubPrivate Sub Form_Unload(Cancel As Integer) cn.Close Set cn = NothingEnd Sub 为了使用该应用程序,则运行它,然后单击“查看列表S”按拉以显示用户列表。当用户单击列表中某用户时,有关详细内容出现在文本框中。为了更新该记录。则只需修改某文本框中内容,然后单击“更新数据U”即可。为了实施更新操作,“更新数据U”按钮Click事件中的代码重新查询数据,然后对之实施Update。在client/server环境下,这不是最有效的力式,但是当你使用Access数据库时,代码工作得很好(更有效率、但同时更复杂的实施更新操作的方式可能是使用SQL的Update命令)。记住,在ADO中缺省的锁方式是只读的(正如在本文前些有关锁讨论中介绍的那样),所以在你实施更新或插入操作之前,你必须把Recordset对象的LockMode属性设置成可编辑方式。除此之外,这段代码与DAO的等价代码之间的显著差别是ADO没有(或不需要)Edit方法。如果该Recordset是可编辑的你只需更改某字段的内容,然后执行Update方法把信息写回数据库。为了插人记录,你应往应用程序中添加“添加数据A”按钮: Private Sub cmdAddNew_Click()Dim strSQL As String Open empty recordset strSQL = select * & _ from tblCustomer & _ where ID = 0 mrsCust.Source = strSQL Set mrsCust.ActiveConnection = cn mrsCust.Open mrsCust.AddNew mrsCust.Fields(FirstName) = txtFirstName.Text mrsCust.Fields(LastName) = txtLastName.Text mrsCust.Fields(Address) = txtAddress.Text mrsCust.Fields(City) = txtCity.Text mrsCust.Fields(State) = DE mrsCust.Update mrsCust.Close End Sub 在实际的应用程序中你会想把“更新”和“插入”功能溶入Save的概念中。你可以通过检查记录集的状念来实现比如,如果它在主关键字域中包含个值,则需要更新操作,而不是插入操作。代码范例在目录Update下,你会看到项目ex_04.vbp,其中包含本部分所讨论的代码。6. 创建无连接记录集当你使用ADO客户机端临时表库时,你可以断开与服务器的连接,并且可以继续处理数据。这样,让应用程序具有更多扩展性很难,原因是如果他们不必始终与服务器保持连接,则在任何给定时刻,许多用户可能正在处理数据。为了在ADO中与服务器断开连接、你可以设置Recordset对象的Active Connection属性为Nothlng。客户方将继续可以处理数据,尽管它现在已经与服务器断开连接。程序清单5是服务器方组件某方法的示例其中该方法返回个无连接的ADO Recordset。如果你想在用户界面中显示一列用户的话,这种方法或许很适合。程序清单5. 返回一个无连接的ADO Recordset对象 Public Function GetList(strState As String) As ADODB.Recordset Retrieves a list of employees and places it into a disconnected ADO recordset.Dim strSQL As StringDim rs As ADODB.Recordset strSQL = SELECT ID, FirstName, LastName & _ FROM tblCustomer & _ WHERE State = & strState & & _ ORDER BY LastName, FirstName Create and initialize recordset Set rs = New ADODB.Recordset Set rs.ActiveConnection = cn rs.CursorLocation = adUseClient rs.LockType = adLockReadOnly rs.CursorType = adOpenForwardOnly rs.Open strSQL Disconnect Set rs.ActiveConnection = Nothing Return recordset Set GetList = rs Dereference object variable Set rs = Nothing End Function 为了在单个顾客记录上实施相同的操作,你可以按照程序清单6那样更改SQL语句。程序清单6. 以无连接ADO Recordset的形式返回单个记录 Public Function GetData(lngID As Long) As ADODB.RecordsetDim rs As ADODB.RecordsetDim strSQL As String strSQL = SELECT * & _ FROM tblCustomer & _ WHERE ID = & lngID Create and initialize recor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论