热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

掌握VB中的ADO数据对象编程

ADO是ActiveXDataObjects的缩写,是一项新的数据库的存取技术。相对于VB5.0中的DAO他具有更为简化的对象模型,无论是存取本地的还是远程的数据,都提供了一致的接

  ADO是ActiveX Data Objects 的缩写,是一项新的数据库的存取技术。相对于VB5.0中的DAO他具有更为简化的对象模型,无论是存取本地的还是远程的数据,都提供了一致的接口.就我本人而言,ADO的确比DAO要好用得多。

  今天只就ADO的对象模型谈一谈.ADO定义了一个可编程的对象集合.ADO对象模型如图所示:


  对于ADO其中对象来说,我觉得比较重要的是:Command,Connection,Recordset对象。

  虽然严格的说这是不准确的,但根据我的实际经验确实如此.下面就分别来谈一下。

  (1) Connection对象

  Connection对象用于建立与数据库的连接.通过连接可从应用程序访问数据源.它保存诸如指针类型,连接字符串,查询超时,连接超时和缺省数据库这样的连接信息.

  (2) Command对象

  在建立Connection后,可以发出命令操作数据源.一般情况下,Command对象可以在数据库中添加,删除或更新数据,或者在表中进行数据查询.Command对象在定义查询参数或执行一个有输出参数的存储过程时非常有用。

  (3) Recordset对象

  Recordset对象只代表一个记录集,这个记录集是一个连接的数据库中的表,或者是Command对象的执行结果返回的记录集.在ADO对象模型中,是在行中检查和修改数据的最主要的方法,所有对数据的操作几乎都是在Recordset对象中完成的.Record对象用于指定行,移动行,添加,更改,删除记录。

  下面就具体地说说如何用ADO存取数据:

  在实际编程过程中使用ADO的一个典型的存取数据的步骤为:

  (1) 连接数据源

  (2) 打开记录集对象

  (3) 使用记录集

  (4) 断开连接

  那么具体怎么是用呢?分别来看。(我在最后将给出一个完整的使用ADO的实例给大家参考.)

  (1) 如何连接数据源

  利用Connection对象可以创建一个数据源的连接.应用的方法是Connection对象的Open方法。

  语法:

Connection对象.Open ConnectionString, UserID, PassWord, OpenOptions

  其中:

  ·Connection对象为你定义的Connection对象的实例;

  ·ConnectionString为可选项,包含了连接的数据库的信息;

  ·UserID 可选项,包含建立连接的用户名;

  ·PassWord为可选项,包含建立连接的用户密码;

  ·OpenOptions为可选项,假如设置为adConnectAsync,则连接将异步打开.

  (2)打开记录集对象

  实际上记录集返回的是一个从数据库取回的查询结果集.因此他有两种打开方法:一种使用记录集的Open方法,另一种是用Connection对象的Execute方法。

  (a)记录集的Open方法

  语法:

Recordset.Open Source, ActiveConnection, CursorType, LockType, Options

  其中:

  ·Recordset为所定义的记录集对象的实例。

  ·Source可选项,指明了所打开的记录源信息.可以是合法的命令,对象变量名,SQL语句,表名,存储过程调用,或保存记录集的文件名。

  ·ActiveConnection可选项,合法的已打开的Connection对象的变量名,或者是包含ConnectionString参数的字符串。

  ·CursorType可选项,确定打开记录集对象使用的指针类型。

  ·LockType可选项 确定打开记录集对象使用的锁定类型。

  (b)Connection对象的Execute方法

  语法:

Set recordset=Connection.Execute(CommandText,RecordsAffected,Options)

  参数说明:

  ·CommandText 一个字符串,返回要执行的SQL命令,表名,存储过程或指定文本。

  ·RecordsAffected 可选项,Long类型的值,返回操作影响的记录数。

  ·Options 可选项,Long类型值,指明如何处理CommandText参数。

  介绍完了如何打开数据库下面说说怎么使用吧.

  (3)使用记录集

  (a)添加新的记录:

  在ADO中添加新的记录用的方法为:AddNew 它的语法为:

  Recordset.AddNew FieldList, Values

  ·Recordset为记录集对象实例

  ·FieldList为一个字段名,或者是一个字段数组.

  ·Values为给要加信息的字段赋的值,如果FiledList为一个字段名,那么Values应为一个单个的数值,假如FiledList为一个字段数组,那么 Values必须也为一个个数,类型与FieldList相同的数组。

  再用完AddNew方法为记录集添加新的记录后,应使用UpDate将所添加的的数据存储在数据库中.不过你最好在用UpDate方法之前使用CancelUpdate方法来取消该项操作。

  (b)修改记录集

  其实修改核对记录集中的数据重新赋值没有什么太大的区别,只要用SQL语句将要修改的字段的一个数据找出来重新赋值就可以了.这里不再细说了。

  (c)删除记录

  在ADO中删除记录集中的数据的方法为:Delete方法,这与DAO对象的方法相同,但是在ADO中它的能力增强了,可以删掉一组记录了.
它的语法如下:

Recordset.Delete AffectRecords

  其中的,AffectRecords参数是确定Delete方法作用的方式的,它的取值如下:

  ·adAffectCurrent 只删除当前的记录

  ·adAffectGroup 删除符合Filter属性设置的那些记录.为了一次能删除一组数据,应设置Filter属性.

  (d)查询记录

  在ADO中查询的方法很灵活,有几种查询的方法.

  ·使用连接对象的Execute方法执行SQL命令,返回查询记录集.

  ·使用Command对象的Execute方法执行CommandText属性中设置的SQL命令,返回查询记录集.

  第一个方法的具体语法在前面数据连接时已经介绍过了,下面就第二方法具体说一下.

  Command对象的Execute方法的语法如下:

Command.Execute RecordsAffected, Parameters, Options '不返回记录集
或者 Set Rscordset=cmmnad.Execute(RecordsAffected,Parameters,Options) '返回记录集

  CommandText的语法为:

Command.CommandText=stringvariable

  其中: stringvariable为字符串变量,包含SQL语句,表名或存储过程.

  (4) 断开连接

  在应用程序结束之前,应该释放分配给ADO对象的资源,操作系统回收这些资源并可以再分配给其他应用程序。

  使用的方法为:Close方法。

  语法如下:

Object.Close ' Object为ADO对象

  好了,说了那么多的理论,下面我们就应用一下吧!
 
  下面我给出一个我自己写的实例,是一个用户登录,注册,密码修改,用户删除的应用小程序.你也可以到本版的下载仓库中下载.

  具体实现方法:

  在本程序中包括了四个窗体.

  ·一个用于用户登录,名字为:FormDengLu;

  ·一个用于用户注册,名字为:FormZhuCe;

  ·另一个为用于用户修改密码,名字为:FormXiuGai;

  ·最后一个用于用户删除,名字为:FormShanChu.

  下面进行ADO对象的定义与设置,不过在这之前你必须在工程中引用ADO对象.

  定义ADO对象:

Dim ZhuCe As ADODB.Connection ' ZhuCe为连接对象
Dim rstZhuCe As ADODB.Recordset 'rstZhuCe为记录集对象
Dim cmmZhuCe As ADODB.Command 'cmmZhuCe为命令对象

  在Form_Load过程中应进行如下的ADO设置:

Set ZhuCe = New ADODB.Connection '设置连接对象实例
ZhuCe.CursorLocation = adUseClient
'打开数据源连接
ZhuCe.Open "provider=Microsoft.Jet.OLEDB.4.0;Data Source=App.Path\注册.mdb"
'设置记录集对象实例
Set rstZhuCe = New ADODB.Recordset
Set rstZhuCe.ActiveConnection = ZhuCe
'打来记录集
rstZhuCe.Open "select * from 注册", ZhuCe, adOpenStatic, adLockOptimistic
'设置命令对象实例
Set cmmZhuCe = New ADODB.Command
Set cmmZhuCe.ActiveConnection = ZhuCe

  添加新的用户信息(原码)

If TextYongHuMing.Text = "" Or TextMiMa.Text = "" Or _
 TextTiShiWenTi.Text = "" Or TextTiShiDaAn.Text = "" Then
 MsgBox "笔添信息没有添完,请输入完全", vbOKOnly + vbExclamation, "提示"
Else
 If TextJiaoYan.Text = TextMiMa.Text Then
  rstZhuCe.MoveLast '记录集中的移动方法,指针移动到记录集的末尾
  rstZhuCe.AddNew '添加新的记录
  rstZhuCe!用户名 = TextYongHuMing.Text
  rstZhuCe!密码 = TextMiMa.Text
  rstZhuCe!姓名 = TextXingMing.Text
  rstZhuCe!昵称 = TextNiCheng.Text
  rstZhuCe!联系地址 = TextLianXiDiZhi.Text
  rstZhuCe!邮政编码 = TextYouBian.Text
  rstZhuCe!OICQ = TextOICQ.Text
  rstZhuCe!电子邮件 = TextMail.Text
  rstZhuCe!呼机 = TextHuJi.Text
  rstZhuCe!手机 = TextShouJi.Text
  rstZhuCe!密码提问 = TextTiShiWenTi.Text
  rstZhuCe!提问答案 = TextTiShiDaAn.Text
  rstZhuCe!电话号码 = TextDianHua.Text
  rstZhuCe.Update '将上面所有的信息存储到数据库中
  MsgBox "注册成功", vbOKOnly + vbInformation, "注册成功"
 Else
  MsgBox "校验密码与密码不一致,请重新输入", vbOKOnly + vbExclamation, _
"密码错误"
  TextMiMa.Text = ""
  TextJiaoYan.Text = ""
 End If
End If

  下面为修改用户密码(在此中我并没用到上面提到的两种方法,但是这种方法也很简单,实际上应该是属于第一种方法.

  代码如下:

Dim a As String
Dim b As String
If TextYongHuMing.Text = "" Or TextMiMa.Text = "" Or TextJiaoYanMiMa.Text = "" Or TextXinMiMa.Text = "" Then
 MsgBox "修改信息填写不完全,请重新填写!", vbOKOnly + vbInformation, "修改错误"
 TextYongHuMing.Text = ""
 TextMiMa.Text = ""
 TextJiaoYanMiMa.Text = ""
 TextXinMiMa.Text = ""
Else
 If TextXinMiMa.Text <> TextJiaoYanMiMa.Text Then
  MsgBox "校验密码与新密码不一致,请重新填写!", vbOKOnly &#43; vbExclamation, "密码错误"
  TextJiaoYanMiMa.Text &#61; ""
  TextXinMiMa.Text &#61; ""
 End If
 a &#61; "select 用户名,密码 from 注册 where 用户名 &#61;&#39;" & _
 TextYongHuMing.Text & _
"&#39; AND 密码 &#61; &#39;" & _
TextMiMa.Text & "&#39;;"
 rstZhuCe.Open a, ZhuCe, adOpenKeyset, adLockOptimistic
 rstZhuCe!密码 &#61; TextXinMiMa.Text
 MsgBox "密码修改成功,您的新密码是:" & rstZhuCe!密码 & "!", vbOKOnly &#43; vbInformation, "修改成功"
End If

  也许你这样看起来的确实有点麻烦,不过你可以去下载全部程序,那样看起来比较简单!

  下面是用户的删除.

  代码如下:

Dim a As String
Dim ok As Integer
Dim i As Integer
rstZhuCe.MoveFirst
For i &#61; 0 To rstZhuCe.RecordCount - 1
 If rstZhuCe!用户名 &#61; ComboYongHuMing.Text And rstZhuCe!密码 &#61; TextMiMa.Text Then
  ok &#61; MsgBox("你确定真的要将此用户删除吗?", vbOKCancel &#43; vbQuestion, "提示")
  If ok &#61; 1 Then
   rstZhuCe.Delete adAffectCurrent &#39;删除所找到的用户
   MsgBox "此用户已经成功删除!", vbOKOnly &#43; vbInformation, "删除成功"
  End If
 End If
 rstZhuCe.MoveNext
Next I

  好了到此为止,我向大家介绍了一下ADO对象的简单知识与基本用法,并赋上我的一点经验供大家参考。

转:https://www.cnblogs.com/ckway/archive/2009/11/05/1596992.html



推荐阅读
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
author-avatar
美多小涛_584
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有