ADO连接

来源:互联网 发布:java上传大文件 编辑:程序博客网 时间:2024/04/27 17:19
 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 + vbExclamation, "密码错误"
            TextJiaoYanMiMa.Text = ""
            TextXinMiMa.Text = ""
        End If
            a = "select 用户名,密码 from 注册 where 用户名 ='" & _
                TextYongHuMing.Text & _
                "' AND 密码 = '" & _
                TextMiMa.Text & "';"
        rstZhuCe.Open a, ZhuCe, adOpenKeyset, adLockOptimistic
        rstZhuCe!密码 = TextXinMiMa.Text
        MsgBox "密码修改成功,您的新密码是:" & rstZhuCe!密码 & "!", vbOKOnly + vbInformation, "修改成功"
    End If
    也许你这样看起来的确实有点麻烦,不过你可以去下载全部程序,那样看起来比较简单!

    下面是用户的删除.

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

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