精华内容
下载资源
问答
  • 讨论了微软的VB 6.0提供的几种数据库访问技术:Data控件,DAO,RDO,OLE DB和ADO。对这些技术各自的特点和应用进行了具体分析,并说明了在实际应用时必须注意的问题。
  • 这个是我做的一个很简单的剧本的数据库访问技术,包括了增删改查的实现和水晶报表,做的不怎么好,多多指教!
  • VB60数据库访问技术与b例程b解析.doc
  • 基于VB.Net数据库访问技术,超详细易懂!
  • 文章介绍了几种Visual Basic的数据库访问技术,并对这些技术进行了分析,供读者参考
  • 整个程序功能是选择不同的连接方式来进行显示工作
  • 基于VB的SQL Server数据库访问技术.pdf
  • ADO技术VB访问SQL数据库中的应用.pdf
  • 介绍并分析了高级数据库访问技术ADO的分层对象模型及应用系统体系结构,描述了VB中使用ADO访问数据库的详细步骤和语法,最后给出基于VB+SQL Server的ADO数据库访问实例.
  • 基于VB访问SQL Server数据库技术.pdf
  • VB访问SQL Server数据库技术与方法.pdf
  • VB作为一个高效快捷的开发工具而言,在数据库开发上有着很好的表现。但是,对于很多初学者而言,入门时经常会看一些并非高效且封装得更加多的代码作为学习参考(如那种用什么控件、数据捆绑之类的范例代码),导致很...

    VB作为一个高效快捷的开发工具而言,在数据库开发上有着很好的表现。但是,对于很多初学者而言,入门时经常会看一些并非高效且封装得更加多的代码作为学习参考(如那种用什么控件、数据捆绑之类的范例代码),导致很多多初学者想深入时会更加茫然。其实,曾经很多用VB开发的数据库商用软件都不会用那种方法,因为弊病很多,效率也不高。先总结一下为什么说用数据控件效率不高。首先,作为数据库操作的对象而言,是不需要有用户界面的,完全可以在后来默默的查询数据供开发者在代码里任意使用,而控件,其实就是一个用窗口封装的代码模块,里面除了对接数据查询功能,还花了不少代码去搞窗口消息的处理和重绘之类的,当然除了浪费内存,还浪费CPU去处理那些窗口代码,与单纯的无界面后台操作数据库的方式而言,控件的效率肯定要打折扣,还有一个问题就是多窗口使用同一个数据库时,处理起来也很麻烦。再说说那种捆绑数据自动显示的弊病和问题吧。首先因为捆绑了数据源的控件都是自行去分析捆绑记录集的字段、类型、数据条数等,并根据数据源的触发事件将其需要显示的信息自动显示在数据表或输入框中,那么就意味着这些控件都有通过消息或管道进行侦听监控才触发的这些更新过程,这无形中又会浪费很多内存资源和CPU资源,效率肯定也会下降。再者就是灵活性差,因为他是根据记录集查询出来的内容变化整体输出或单条输出,而不是通过代码控制处理,碰到些想合并表格或做点表格表达式运算处理就有心无力了。所以,通常专业的商用软件很少有人会用这种数据控件或数据捆绑技术作为数据库操作的核心处理模式。那么我所谓的专业的商用软件具体用的是什么技术去实现这种数据库操作的呢?其实对于看了众多案例的初学者来说应该也可能见过,就是使用 ADO 对象,全称是 Microsoft ActiveX Data Objects,在VB引用里可以找到,不过你可能找到的有很多版本,如:

    具体选哪一个呢,其实都可以,保险点选个最低版本都兼容,当你勾选了一个ADO对象后选确定,然后点击“对象浏览器”按钮,然后再点开对象下拉列表,就可以看到一个新的对象 ADODB在你的工程中了,如:

    这时我们可以鼠标右键点击Form1窗口,在弹出的菜单选“查看代码”编辑些初始代码。

    而在编写代码前,我先介绍一下 ADO 对象,ADO 对象主要是负责与数据引擎对接的一个公共接口。其中比较常用的有两个部分,一个是链接对象 ADODB.Connection 和记录集 ADODB.Recordset,然后我再分别介绍一下这两个对象的一些功能和常用的方法与属性:

    ADODB.Connection 对象

    负责链接目标数据库(可以指定服务器、用户账号、密码、数据库名称、数据库文件地址等等信息与指定数据库连接),还可以直接在已连接数据库的对象上调用 Execute 方法执行 SQL 语句。

    常用的方法有:Open、Execute、Close,常用的属性有:State

    ADODB.Connection.Open 方法用来连接数据库
    ADODB.Connection.Execute 方法用来在已连接的数据库执行 SQL 语句
    ADODB.Connection.Close 方法可以关闭已连接的数据库
    ADODB.Connection.State 属性可以读取当前的连接状态
    当然,ADODB.Connection 还有其它很多方法、属性与事件,不过通常不常用,上面这些通常的程序够用了,如果想深入了解别的属性或方法,可以看看 VS6 的 MSDN 说明。

     

    ADODB.Recordset 对象

    负责利用以连接好的 ADODB.Connection 对查询出来的数据进行进一步的处理,所以 ADODB.Recordset 在使用是需要关联 ADODB.Connection 对象一起使用。

    常用的方法有:Open、MoveNext、Move、Close,常用的属性有:RecordCount、Fields、EOF等。

    当然像 AddNew、UpdateBatch、MoveFirst、MoveLast、MovePrevious、Delete 等等也是比较常用的,只是如果玩 SQL 语句进行创建、查询、插入、删除等操作,这些方法属性等都很少用到。

    ADODB.Recordset.Open 指定 ADODB.Connection 对象查询指定的 SQL语句
    ADODB.Recordset.MoveNext 将当前记录向下移动一条
    ADODB.Recordset.Move 将当前记录向上或向下移动到指定的条数,可以输入负数或正数
    ADODB.Recordset.Close 关闭查询结果
    ADODB.Recordset.RecordCount 取得已查询的数据条数(要得到数据条数不建议使用该属性,可以用SQL语句的Count聚合函数统计出数据结果,效率会更高)
    ADODB.Recordset.Fields 取得已查询的出的字段信息,包含字段名称、类型、数据等都可以读取或设置
    ADODB.Recordset.EOF 可以在死循环里判断是否移动到了数据结尾以结束死循环
     

    有了这两个对象后基本上就可以对数据库进行任何操作了,之后的关键就是去了解 SQL 语句了,不同的数据库在 SQL 语句的使用上会略有不同,但也是大同小异的,如 ACCESS的日期类型和MS SQLServer 的日期类型就有少许区别,ACCESS是用 #2019-12-06# 来指定日期,而 MS SQLServer 是用 '2019-12-06' 来指定日期等大同小异的区别。

    现在我们可以来看看具体的使用案例了:

    由于我们之前在工程里引用的 ADO 对象,所以我们可以在窗口代码里直接定义Connection与Recordset类型的变量,如:

    Private Sub Form_Load()
        Dim conn As Connection
        Dim rs As Recordset
    
    End Sub

    但是,VB的对象使用是需要初始化的,所以我们还需要为这两个对象变量进行初始化,过程如下:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
    End Sub

    接着我们需要先链接数据库,然后才能对数据库进行创建、查询、修改、插入、删除等操作,所以我们先来了解一下如何链接数据库。链接数据库之前有介绍,我们可以通过 Connection 的 Open 方法来连接数据库,具体格式是:

    对象.Open 字符串类型的连接语句,例如我们尝试链接一个存放在 d:\1.mdb 的 ACCESS 数据库,我们可以这样进行连接:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 连接 ACCESS 数据库
        conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        
    End Sub
    

    但是,即使使用了 Open 方法尝试链接数据库也未必就能链接成功,因为可能文件被意外移动,文件被意外修改或是磁盘出现坏道什么的导致文件丢失,作为一个专业的软件不可能让一个不能确定的链接跑之后的程序的,所以需要对链接状态进行判断,确认链接状态不是关闭后才继续跑之后的程序,否则将提示错误做重新链接或退出程序之类的处理,如:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 连接 ACCESS 数据库
        conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '...
        
    End Sub

    在开发这种 Open、Close 程序的时候,需要养成一个良好的习惯,就是当你写了 Open 之后,接着就想着在哪先写好 Close 过程,如:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 连接 ACCESS 数据库
        conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '...
        
        ' 完成所有数据操作关闭数据连接
        conn.Close
    End Sub
    

    然后我们来进一步说一说 Connection 的 Execute 方法,通常 Execute 方法都是用作那种不需要返回,只需要执行一次SQL性操作的情况下使用,如:创建数据表、插入数据、修改数据、删除数据时使用,所以,接下来我们尝试在一个数据表中实现数据的插入、修改、删除等操作。例如我们 d:\1.mdb ACCESS数据库中有一个名为 user 的表,字段分别有 id、uid()、pwd、uname、sex,bd等,类型如图:

    然后我们尝试插入一条数据,代码如下:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 连接 ACCESS 数据库
        conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '---------- 插入数据 ----------
        conn.Execute "INSERT INTO `user` (`uid`,`pwd`,`uname`,`sex`,`bd`) VALUES ('sk','123','人类',1,#2019-12-06#)"
        
        
        ' 完成所有数据操作关闭数据连接
        conn.Close
    End Sub

    然后我们先确保关掉 ACCESS 的情况下尝试运行程序,再用 ACCESS 打开数据库看看结果,发现数据已经插入成功了:

    但这时候我们会发现如果要同时插入多条数据SQL语句会很长,这时候还是直接在 Execute 方法后放字符串会很难管理字符串,所以我们可以在程序开头多定义一个字符串变量出来专门存储SQL语句,这样使用起来代码格式看起来会整洁很多:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        Dim SQL As String           ' 定义一个字符串变量用来存储 SQL 语句
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 设置数据库连接语句
        SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        ' 连接 ACCESS 数据库
        conn.Open SQL
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '---------- 插入数据 ----------
        SQL = "INSERT INTO `user` ("
        SQL = SQL & "`uid`,"
        SQL = SQL & "`pwd`,"
        SQL = SQL & "`uname`,"
        SQL = SQL & "`sex`,"
        SQL = SQL & "`bd`"
        SQL = SQL & ") VALUES "
        SQL = SQL & "('sk','123','人类',1,#2019-12-06#)"
        
        conn.Execute SQL
        
        
        ' 完成所有数据操作关闭数据连接
        conn.Close
    End Sub
    

    然后我们再尝试一下删除所有数据

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        Dim SQL As String           ' 定义一个字符串变量用来存储 SQL 语句
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 设置数据库连接语句
        SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        ' 连接 ACCESS 数据库
        conn.Open SQL
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '---------- 删除数据 ----------
        SQL = "DELETE FROM `user`"
        conn.Execute SQL
        
        '---------- 插入数据 ----------
        SQL = "INSERT INTO `user` ("
        SQL = SQL & "`uid`,"
        SQL = SQL & "`pwd`,"
        SQL = SQL & "`uname`,"
        SQL = SQL & "`sex`,"
        SQL = SQL & "`bd`"
        SQL = SQL & ") VALUES "
        SQL = SQL & "('sk','123','人类',1,#2019-12-06#)"
        conn.Execute SQL
        
        
        ' 完成所有数据操作关闭数据连接
        conn.Close
    End Sub
    

    这个时候我们再运行一次程序,会发现原先 ID 为 1 的数据变成了 ID 为 2 的数据,这是因为原来添加的那条 ID 为 1 的数据在程序一运行时就被无差别的清理掉了,然后这条 ID 为 2 数据是刚刚运行的程序才插入进去的。

    然后我们再尝试着同时加几条数据并尝试修改某条数据看看:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        Dim SQL As String           ' 定义一个字符串变量用来存储 SQL 语句
        Dim SQL_INSERT As String    ' 定义一个字符串变量用来存储 SQL INSERT 语句
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 设置数据库连接语句
        SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        ' 连接 ACCESS 数据库
        conn.Open SQL
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '---------- 删除数据 ----------
        SQL = "DELETE FROM `user`"
        conn.Execute SQL
        
        '---------- 插入数据 ----------
        SQL_INSERT = "INSERT INTO `user` (`uid`,`pwd`,`uname`,`sex`,`bd`) VALUES "
        
        SQL = SQL_INSERT & "('sk','123','人类',1,#2019-12-06#)"
        conn.Execute SQL
        
        SQL = SQL_INSERT & "('ii','111','测试1',0,#2019-12-06#)"
        conn.Execute SQL
        
        SQL = SQL_INSERT & "('jjj','222','测试2',0,#2019-12-06#)"
        conn.Execute SQL
        
        SQL = SQL_INSERT & "('kk','333','测试3',0,#2019-12-06#)"
        conn.Execute SQL
        
        '---------- 修改数据 ----------
        ' 指定条件为 UID 为 jjj 的数据,将其 uname 改为 TestUserName, sex 改为 1
        SQL = "UPDATE `user` SET `uname`='TestUserName',`sex`=1 WHERE `uid`='jjj';"
        conn.Execute SQL
        
        ' 完成所有数据操作关闭数据连接
        conn.Close
    End Sub

    然后可以发现数据库添加了有4条数据, UID 为 jjj 的数据 uname 变成了 TestUserName:

    但老是这么用ACCESS来读数据也不是个办法,所以当我们了解了删除、插入、修改数据后,我们就来了解一下查询数据的方法了,让我们先按照步骤,先看看输入一个查询语句查询数据表的过程代码:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        Dim SQL As String           ' 定义一个字符串变量用来存储 SQL 语句
        Dim SQL_INSERT As String    ' 定义一个字符串变量用来存储 SQL INSERT 语句
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 设置数据库连接语句
        SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        ' 连接 ACCESS 数据库
        conn.Open SQL
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '---------- 删除数据 ----------
        SQL = "DELETE FROM `user`"
        conn.Execute SQL
        
        '---------- 插入数据 ----------
        SQL_INSERT = "INSERT INTO `user` (`uid`,`pwd`,`uname`,`sex`,`bd`) VALUES "
        
        SQL = SQL_INSERT & "('sk','123','人类',1,#2019-12-06#)"
        conn.Execute SQL
        
        SQL = SQL_INSERT & "('ii','111','测试1',0,#2019-12-06#)"
        conn.Execute SQL
        
        SQL = SQL_INSERT & "('jjj','222','测试2',0,#2019-12-06#)"
        conn.Execute SQL
        
        SQL = SQL_INSERT & "('kk','333','测试3',0,#2019-12-06#)"
        conn.Execute SQL
        
        '---------- 修改数据 ----------
        ' 指定条件为 UID 为 jjj 的数据,将其 uname 改为 TestUserName, sex 改为 1
        SQL = "UPDATE `user` SET `uname`='TestUserName',`sex`=1 WHERE `uid`='jjj';"
        conn.Execute SQL
        
        '---------- 查询数据 ----------
        SQL = "SELECT * FROM `user`"
        rs.Open SQL, conn, adOpenStatic, adLockReadOnly
        
        rs.Close
        
        
        ' 完成所有数据操作关闭数据连接
        conn.Close
    End Sub
    

    看到查询语句部分很简单,就是记录集 rs 指定数据连接对象 conn 用已设置好的 SQL 语句查询并返回结果,然后记录集 rs 把存入相关属性或对象中,如把字段相关的结果存入记录集内的 Fields 对象中,当前是否是最后一条记录存到 EOF 属性中等等。所以这时候我们可以使用 RecordCount 属性的读取取得查询到的数据条数,这样就可以用 For 语句循环指定的次数,然后在每一次循环过程中向下移动一下数据就可以读取所有的数据并输出出来,如:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        Dim SQL As String           ' 定义一个字符串变量用来存储 SQL 语句
        Dim SQL_INSERT As String    ' 定义一个字符串变量用来存储 SQL INSERT 语句
        Dim i As Long               ' 定义一个整数变量用作循环语句使用
        Dim str_out As String       ' 定义一个字符串变量用作输出文本用
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 设置数据库连接语句
        SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        ' 连接 ACCESS 数据库
        conn.Open SQL
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '...
        
        '---------- 查询数据 ----------
        str_out = ""
        SQL = "SELECT * FROM `user`"
        rs.Open SQL, conn, adOpenStatic, adLockReadOnly
        For i = 1 To rs.RecordCount
            If i > 1 Then
                str_out = str_out & vbCrLf
            End If
            str_out = str_out & rs!id & vbTab & rs!uname & vbTab & rs!uid & vbTab & rs!pwd
            If i < rs.RecordCount Then rs.MoveNext
        Next i
        rs.Close
        
        
        ' 完成所有数据操作关闭数据连接
        conn.Close
        
        MsgBox str_out, 64, "数据"
        End
    End Sub
    

    也可以用 Do loop 这类死循环通过读取 EOF 属性来读取全部数据,如:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        Dim SQL As String           ' 定义一个字符串变量用来存储 SQL 语句
        Dim SQL_INSERT As String    ' 定义一个字符串变量用来存储 SQL INSERT 语句
        Dim i As Long               ' 定义一个整数变量用作循环语句使用
        Dim str_out As String       ' 定义一个字符串变量用作输出文本用
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 设置数据库连接语句
        SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        ' 连接 ACCESS 数据库
        conn.Open SQL
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '...
        
        '---------- 查询数据 ----------
        str_out = ""
        SQL = "SELECT * FROM `user`"
        rs.Open SQL, conn, adOpenStatic, adLockReadOnly
        i = 1
        Do While Not rs.EOF
            If i > 1 Then
                str_out = str_out & vbCrLf
            End If
            str_out = str_out & rs!id & vbTab & rs!uname & vbTab & rs!uid & vbTab & rs!pwd
            i = i + 1
            If Not rs.EOF Then rs.MoveNext
        Loop
        rs.Close
        
        
        ' 完成所有数据操作关闭数据连接
        conn.Close
        
        MsgBox str_out, 64, "数据"
        End
    End Sub

    好了,这里就基本上算是能够插入、修改、删除、读取数据库了,如果想把查询的内容放到数据表内,可以用一些第三方表格控件来处理,通常都支持行列设置的,自己按行列设置表格数据,这样灵活性会很高,对于一些复杂的第三方表格控件来说,还支持合并表格,多表头的处理,用这种方法读写数据会快很多。

    展开全文
  • 为此Microsoft提出一种新的数据库访问策略,即 “统一数据访问”(UniversalDataAccess)的策略。“统一数据访问”提供了高性能的存取包括关系型和非关系型在内的多种数据源,提供独 立于开发工具和开发语言的简单的...
  • VB6.0访问SQL Server数据库技术.pdf
  • VB访问数据库的方法与原则1.VB访问数据库的原则 总则:具体问题具体分析,根据具体的环境、条件、要求而采用适当的方案 *代码的重用和运行的效率 例如:通过使用ODBC数据源连接数据库的方法,可在变换多种数据库...

    VB访问数据库的方法与原则


    1.VB访问数据库的原则


      总则:具体问题具体分析,根据具体的环境、条件、要求而采用适当的方案


      *代码的重用和运行的效率


      例如:通过使用ODBC数据源连接数据库的方法,可在变换多种数据库类型的情况下,而不用频繁修改代码。用VBSQL通过DB-Library就做不到。而ODBC接口并不是VB访问数据库运行效率最高的方法。同样,同是使用ODBC接口的ADO的效率要高于RDO


      *实现的简便性,易维护性


      如果一种方法实现起来很复杂,工程的开发必然造成人力物力的浪费,同时这样设计出来的应用程序只会支持起来更复杂或维护时更困难。例如:本地需要访问ISAM或Jet类型数据源,那么就使用DAO/Jet,而没有必要使用通过ODBC的方法。RDC实现起来要较RDO更容易


      *安全性原则


      报这一条应根据环境和条件决定。例如局域网的网络安全性要好于广域网因而可直接利用数据控件如DC,这样实现起来方便快捷,而广域网需要大量的错误捕获,如用RDC就不如用RDO易控制错误。


      2.VB访问数据库的方法


      VB访问数据库的方法很多,一般情况下分成两大类,而每一类又有很多方法。


      数据访问接口功能及含义:


      ADC:高级数据连接器(AdvancedDataConnector):提供绑定ADO数据源到窗体的数据绑定控件上。ADC主要是一种直接访问或者通过ADO访问远程OLEDB对象的一种技术,它也支持主要应用在微软IE浏览器上的数据绑定控件。它是特地为Web上的浏览器为基础的应用程序而设计的。


      ADO:Active数据对象(ActiveDataObjects):ADO实际是一种提供访问各种数据类型的连接机制。ADO设计为一种极简单的格式,通过ODBC的方法同数据库接口。可以使用任何一种ODBC数据源,即不止适合于SQLServer、Oracle、Access等数据库应用程序,也适合于Excel表格、文本文件、图形文件和无格式的数据文件。ADO是基于OLE-DB之上的技术,因此ADO通过其内部的属性和方法提供统一的数据访问接口方法。


      DAO:数据访问对象(DataAccessObjects):是一种面向对象的界面接口。通过DAO/Jet功能可以访问ISAM数据库,使用DAO/ODBCDirect功能可以实现远程RDO功能。使用DAO的程序编码非常简单,DAO提供丰富的游标(Cursor)类型的结果集和非游标(Cursor-Less)类型的结果集,同DDL(数据描述语言)的功能很类似。


      DAO模型是设计关系数据库系统结构的对象类的集合。它们提供了完成管理这样一个系统所需的全部操作的属性和方法,包括创建数据库,定义表、字段和索引,建立表间的关系,定位和查询数据库等工具。


      JET:数据连接性引擎技术(JointEngineTechnology):是一种基于工作站通过DAO的数据库访问机制。虽然可以通过微软Access提供的ODBC驱动程序访问Jet数据库,但使用这些驱动程序在功能上有所限制。Jet机制有自己的查询和结果集处理功能,并可对同种或异种数据源作查询处理。


      0DBC:开放式的数据库连接(OpenDatabaseConnectivity):是一种公认的关系数据源的接口界面。它快而轻并且提供统一接口的界面,ODBC对任何数据源都未作优化。


      ODBCDirect:是一种基于DAO对象的新的DAO模式,其方法和属性与RDO功能相同。使用在有DAO代码存在的场合,可用来访问远程数据源。


      OLEDB:是一种底层数据访问界面接口。是用于第三方驱动程序商家开发输出数据源到ADO技术的应用程序或用于C++的开发者开发定制的数据库组件。OLEDB不能被VB直接调用。


      RDC:远程数据访问控件(RemoteDataControl):是一种对RDO数据绑定的控件。可以输出特定的结果集到数据源控件。


      RDO:远程数据对象(RemoteDataObjects):远程数据对象和集合为使用代码来创建和操作一个远程ODBC数据库系统的各个部件提供了一个框架。对象和集合都具有描述数据库的各个部件特征的属性以及用来操作这些部件的方法。可以在对象和集合之间建立起关系,这些关系就代表了数据库系统的逻辑结构。RDO是ODBCAPI的一个浅层界面接口。是专为访问远程ODBC关系数据源而设计的。


      VBSQL:是VisualBasic结构化查询语言。是一种基于API的接口方法,几乎与C的DB-LibraryAPI相同。VBSQL只支持微软的SQLServer。VBSQL快而且轻但不支持对象界面。


      使用RDO的一般方法如下。


      先声明变量:


      PublicconAsrdoConnection,resAsrdoResultset


      然后初始化rdoEngine,设置用户和口令等缺省参数;WithrdoEngine


      .rdoDefaultUser="sa"    注释:用户为sa


      .rdoDefaultPassword="pass"    注释:口令为pass


      .rdoDefaultCursorDriver=rdUseServer


      .rdoDefaultLoginTimeout=15


      EndWith


      再连接到要访问的远程数据库(可使用DSNConnection和DSN-LessConnection)。


      使用DSNConnection举例(连接服务器SERVER上的数据库hotel):


      Setcon=rdoEnvironments(0).OpenConnection


      ("hotel",rdDriverNoPrompt,False)


      使用DSN-LessConnection举例(连接服务器SERVER上的数据库hotel):


      Setcon=rdoEnvironments(0).OpenConnection


      ("",rdDriverNoPrompt,False,_"driver={SQLServer};server=SERVER;database=hotel")


      建立连接后,既可使用OpenResultset方法执行查询并处理结果集,又可使用Execute方法执行包括数据定义和数据操作在内的动作查询。例如:


      Setres=con.OpenResultset("SELECT*FROMmenu",rdOpenStatic)


      con.Execute"CREATEVIEWmenu_viewASSELECT代码,菜名FROMmenu",rdExecDirect


      RDO最强大和最重要的特性之一是:它可以查询和处理由存储过程返回的结果,无论它有多么复杂。


      除RDO外,还可使用RDC访问远程数据库。


      远程数据控件(RDC)与数据控件(DC)类似,不同之处是RDC使用RDO连接到ODBC驱动程序管理器,而DC则使用DAO连接到Jet数据库引擎。利用RDO和RDC,无需使用Jet引擎就可以访问ODBC数据源。这样,在访问远程数据库时,可以获得更好的性能和更大的灵活性。


      远程数据控件MSRDC使用举例如下。


      Connect:driver={SQLServer};server=SERVER;database=hotel


      DataSourceName:


      SQL:SELECT*FROMmenu


      UserName:sa


      Password:pass


      CursorDriver:3-rdUseClient


      可以使用RDC执行许多简单的远程数据访问操作,不需编写任何代码,只要填写有关项就可以了,使用起来很方便。但应注意,除非在设计时禁止并只在需要时启动RDC,否则它至少将消耗一个远程数据库连接。在远程数据库连接资源有限或要求很高效的情况下,宜慎用、少用RDC。这种情况下,应尽可能考虑使用RDO,并使用存储过程(预编译好的SQL语句)。


      最后还应注意,只有32位操作系统(如WindowsNT或Windows95),才能支持RDO和RDC。RDO和RDC也只能用于访问32位ODBC数据源。


     

    展开全文
  • VB访问SQL Server数据库技术的探索.pdf
  • 数据库开发工具- 补充-VB数据库访问技术
  • C#(VB.net)数据库访问操作类库

    热门讨论 2009-11-06 16:50:07
    C#(VB.net)数据库访问操作类库 你知道,一些类库把常用的操作封装起来,以后可以直接调用,就节省了普通开发人员的大量精力. 对于CN 大多数公司都是开发MIS系统 说白了就是数据库系统 使用数据访问类库,必将节省大量...
  • VB远程访问SQL Server数据库技术分析与比较.pdf
  • VB数据库访问技术.ppt

    2012-07-25 17:22:37
    VB数据库访问技术学习,vb连接数据的方式及各种方式的优缺点,方便初学者快速掌握相关知识
  • VB6.0数据库访问技术与例程解析(一)

    千次阅读 2006-04-08 15:18:00
    微软设计了多种数据库访问方法,下面通过对VB访问数据库的多种技术进行深入剖析,并总结出实际开发的几点经验。希望能够对那VB的初学者有所帮助。(注意,文中所有的描述均在Windows 2000 professio

    [文章导读]本文简要分析了VB6.0访问数据库的几种技术,并在此基础上总结出几个实用的数据库开发经验

    引言

    作为微软旗下一款优秀的RAD工具,VB在数据库应用开发方面的能力十分强大。微软设计了多种数据库访问方法,下面通过对VB访问数据库的多种技术进行深入剖析,并总结出实际开发中的几点经验。希望能够对那VB的初学者有所帮助。(注意,文中所有的描述均在Windows 2000 professional和Visual Basic 6.0的环境下进行的)

    一. DAO、RDO、ODBC和ADO

    在VB的开发环境中,可以使用三种数据库访问方式,它们分别是:数据访问对象(DAO)、远程数据对象(RDO)和ADO对象模型。

    DAO:

    数据访问对象是用来显露了Microsoft Jet数据库引擎(最早是给Microsoft Access 所使用,现在已经支持其它数据库),并允许开发者通过ODBC直接连接到其他数据库一样,直接连接到 Access 表。DAO 最适用于单系统应用程序或在小范围本地分布使用。其内部已经对Jet数据库的访问进行了加速优化,而且其使用起来也是很方便的。所以如果数据库是Access数据库且是本地使用的话,建议使用这种访问方式。

    VB已经把DAO模型封装成了Data控件,分别设置相应的DatabaseName属性和RecordSource属性就可以将Data控件与数据库中的记录源连接起来了。以后就可以使用Data控件来对数据库进行操作。

    RDO

    RDO(Remote Data Objects)远程数据对象是一个到ODBC的、面向对象的数据访问接口,它同易于使用的DAO style组合在一起,提供了一个接口,形式上展示出所有ODBC的底层功能和灵活性。尽管RDO在很好地访问Jet或ISAM数据库方面受到限制,而且它只能通过现存的ODBC驱动程序来访问关系数据库。但是,RDO已被证明是许多SQL Server、Oracle 以及其他大型关系数据库开发者经常选用的最佳接口。RDO提供了用来访问存储过程和复杂结果集的更多和更复杂的对象、属性,以及方法。

    和DAO一样,在VB中也把其封装为RDO控件了,其使用方法与DAO控件的使用方法完全一样。

    ODBC

    ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。

    一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。

    一个完整的ODBC由下列几个部件组成:

    1. 应用程序(Application)

    ODBC管理器(Administrator)。该程序位于Windows 95控制面板(Control Panel)的32位ODBC内,其主要任务是管理安装的ODBC驱动程序和管理数据源。

    驱动程序管理器(Driver Manager)。驱动程序管理器包含在ODBC32.DLL中,对用户是透明的。其任务是管理ODBC驱动程序,是ODBC中最重要的部件。

    2. ODBC API

    ODBC 驱动程序。是一些DLL,提供了ODBC和数据库之间的接口。

    数据源。数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。

    ODBC连接目前仅仅限于关系型数据库,对于其他数据源比如EXCEL、文本文件都不能进行访问,而且有很多DBMS(数据库管理系统)都不能充分的支持其所有的功能。相比之下,OLEDB可以存取任何形式的数据,所以其功能是相当的强大,它也指导了目前技术发展的方向。

    ADO

    ADO(ActiveX Data Object)是DAO/RDO的后继产物。ADO 2.0在功能上与RDO更相似,而且一般来说,在这两种模型之间有一种相似的映射关系。ADO"扩展"了DAO和 RDO 所使用的对象模型,这意味着它包含较少的对象、更多的属性、方法(和参数),以及事件。

    作为最新的数据库访问模式,ADO的使用也是简单易用,所以微软已经明确表示今后把重点放在ADO上,对DAO/RDO不再作升级,所以ADO已经成为了当前数据库开发的主流。

    ADO涉及的数据存储有DSN(数据源名称)、ODBC(开放式数据连接)以及OLE DB三种方式。后面的例程将详细讲解这三种方式的具体访问实现。

    要使用ADO,必须清楚ADO的对象层次结构,其大体上分为以下7个对象层次:

    1、 Command 对象:包含关于某个命令,例如查询字符串、参数定义等的信息。Command 对象在功能上和 RDO的rdoQuery 对象相似。

    2、 Connection 对象:包含关于某个数据提供程序的信息。Connection 对象在功能上和 RDO 的 rdoConnection 对象是相似的,并且包含了关于结构描述的信息。它还包含某些 RDOEnvironment 对象的功能,例如transaction 控件。

    3、 Error对象:包含数据提供程序出错时的扩展信息。Error 对象在功能上和 RDO 的rdoError 对象相似。

    4、 Field 对象:包含记录集中数据的某单个列的信息。Field 对象在功能上和 RDO的rdoColumn 对象相似。

    5、 Parameter 对象:包含参数化的Command对象的某单个参数的信息。该 Command对象有一个包含其所有Parameter 对象的 Parameters 集合。Parameter 对象在功能上和 RDO 的 rdoParameter 对象相似。

    6、 Property对象:包含某个 ADO 对象的提供程序定义的特征。没有任何等同于该对象的RDO,但DAO有一个相似的对象。

    7、Recordset对象:用来存储数据操作返回的记录集。此对象和Connection对象是所有对象最重要的两个对象。

    当然,对于初级用户来说,我们只需要掌握其中的Connection对象和RecordSet对象就可以实现基本的数据库操作,在后面的经验介绍里面我将给出详细的介绍。

    展开全文
  • VB下利用ADO技术访问Oracle数据库
  • VB中基于ADO的数据库访问

    万次阅读 多人点赞 2012-07-25 17:50:22
    VB中常用的数据库访问接口有三种,即DAO、RDO、ADO三种对象模式。三种模式的具体解释见上篇文章: DAO/RDO/ADO,ODBC,OLEDB之间的关系 本篇文章我们重点介绍一下ADO的应用。 一:ADO的简介 ADO(ActiveX ...

    VB中常用的数据库访问接口有三种,即DAORDOADO三种对象模式。三种模式的具体解释见上篇文章:

    DAO/RDO/ADO,ODBC,OLEDB之间的关系

    本篇文章我们重点介绍一下ADO的应用。

    一:ADO的简介

    ADOActiveX Data Object)是由微软公司开发的最新的数据库访问接口技术,因为ADO技术对OLEDBObject Link and Embedding DataBase)进行了封装并实现了OLEDB所有的功能,所以ADO通过OLEDB可以访问任何类型的数据源,并且减少了编程量。ADO访问数据库的体系可以概括为:

    计算机生成了可选文字: ADO、OLEDB、数据库十·应用程序十

    二:基本流程:

    ADO访问数据库的目标是访问、编辑和更新数据源,因此使用ADO进行数据访问时,一般需要经过一下步骤:

    1)创建一个数据源的连接,连接数据库。

    Set objCn = NewConnection

       strcn ="provider=microsoft.jet.oledb.4.0;persist security info=false;" &_

               "data source=" &App.Path & "\实例1.mdb"

       objCn.ConnectionString = strcn

       objCn.Open

     

    2)设置一个命令来访问数据源的数据。

    3)执行命令。

    Set objCmd = New Command

       Set objCmd.ActiveConnection = objCn

       With objCmd

        .CommandText = "select * from 系统用户where 用户名 like ?" & "and 身份 like ?"

          .CommandType = adCmdText

        End With

        Dim Parm As New Parameter

        Set Parm =objCmd.CreateParameter("用户名", adVarChar, adParamInput, 10)

        objCmd.Parameters.Append Parm

        Set Parm =objCmd.CreateParameter("身份", adVarChar, adParamInput, 10)

        objCmd.Parameters.Append Parm

    4)如果命令的执行导致返回数据库中表的某些行,则将他们保存在缓存中,产生相应的数据集对象,以便对其进行操作。

    5)通过数据集对象进行各种操作,包括修改,添加,删除等。

       

    Private Sub Form_Load()

       Set objCn = New Connection

       objCn.Open "DSN=实例2DSN"

       Set objRS = New Recordset

       With objRS

           .CursorLocation = adUseClient

           .CursorType = adOpenDynamic

           .LockType = adLockOptimistic

           .Open "select * from 系统用户",objCn

        End With

        txtUsername =objRS.Fields("用户名").Value

        txtPassword =objRS.Fields("口令").Value

        txtMsg = objRS.AbsolutePosition &"/" & objRS.RecordCount '直接跳至某条记录

    End Sub

       6)更新数据源,即将修改的结果返回数据源。

    objRS.Update

    7)结束连接

    Set objRS = Nothing

        objCn.Close

     Set objCn = Nothing

    以上是ADO连接数据库的大概步骤,而实际应用时应根据具体情况灵活应用,有时可能只需执行部分步骤即可达到要求。

    三:具体方法

    计算机生成了可选文字: 三个独立主要对象和四个依赖于独立对象的非独立对象集合,他们的关系:圃矿”。对象模型Connection(连接对象)Command(命令对象)Recordset(记录集对象)Field(字段对象)parameter(参数对象)propertv(属性对象)Error(错误对象)才,了了z返回或者设置空间的数据源饭基于“”。的数据库访问,一Oat日SOUrCe返回或设置控件使用的数据源中的特定数据集(使用与多个数据集)OataMenberADOData控件返回或设置绑定控件使用的特定字段一OataField设置从数据源获得数据时的自动化格式OataFOrnlat

     

    VB中,使用ADO访问数据库主要有两种方式:一种是使用ADO Date控件,通过对控件的绑定来访问数据库中的数据。一种是使用ADO对象模型,即编程访问方式(上面的举得例子就是这种方式)

    1.使用ADO Data控件

    可以快速建立数据绑定控件和数据提供者之间的连接。

    在实现数据访问时,只需设置好ADO Data控件的数据相关的属性,无需编写程序代码或者只需少量的代码就可以实现数据访问,同时也可以结合DataGrid控件来实现数据的显示和修改。

    具体步骤不在呈现!

    2.使用ADO对象模型访问数据库

    如上图,ADO对象模型共包括七个对象,三个主要对象和四个依赖于主要对象的对象集合,他们的关系可以概括为:

    计算机生成了可选文字: C',n'Ic'tl',nl二fr',fsl"r',p'rtl心%L'omn1a:l‘盆l"Jf舀m亡ICrSI'l。,l、‘rtIc、kc‘。、rdcdI:IcldsPr.,伴rll七sPr.,PCrll七,

     

    下面我们举一个简单的例子,访问数据库并执行一个简单的查询命令:

    声明变量:

    Dim objRS AsRecordset      '用于保存数据源记录集

    Dim objCn AsConnection     '用于创建数据源连接

    Dim isNeedSave AsBoolean   '用于标识是否需要执行保存操作

     

    Private SubForm_Load()

    建立数据库连接:

        Set objCn = New Connection              '实例化Connection对象

        strcn ="Provider=Microsoft.Jet.OLEDB.4.0;" & _

                                         "Data Source=" & App.Path & "\数据库\db1.mdb"

        objCn.Open strcn               '建立数据库连接

      '创建客户端的记录集

        Set objRS = New Recordset             

        With objRS

            .CursorLocation = adUseClient     '指定游标位置

           

            .CursorType = adOpenStatic          '指定使用键集游标

            .LockType = adLockOptimistic        '指定锁定类型

            .Open "SELECT * FROM 系统用户",objCn

        End With

           

     '显示第一个记录数据

        txtUserName =objRS.Fields("用户名").Value

        txtPassword =objRS.Fields("口令").Value

        txtMsg = objRS.AbsolutePosition &"/" & objRS.RecordCount

    End Sub

    ’善后工作:

    Private SubForm_Unload(Cancel As Integer)

        Set objRS = Nothing                     '释放记录集对象

        objCn.Close                             '释放数据库连接

        Set objCn = Nothing                     '释放连接对象

    End Sub

     

    两种ADO数据库访问方式的特点:

    1)使用ADO控件几乎封装了相应代码的所有功能,简化编程。但是也造成了它的灵活性较差,一般一个ADO Data控件只能在同一个数据源上打开一个记录集或者执行一个查询命令。而使用ADO对象模型就要灵活的多,可以建立独立的连接对象,可以在同一个数据源上打开多了记录集或执行多个命令。可动态的指定数据库的来源地。

    2)使用ADO Data控件可以简化操作过程,但功能上有所限制,很多功能都是静态的,在运行时很难改变。而使用ADO对象模型能够自由的控制各种操作。

    3)使用ADO Data控件在数据表记录的浏览、添加。修改上提供了简化操作,但如果数据库过大的话,就会造成效率低下。

    也就是说:ADO控件最大的优点就是操作简单,但是灵活性和功能以及效率上没有ADO对象模型好。在使用时我们应该根据具体情况而定,用ADO Data控件访问小型的数据库应用程序,而大型的数据库应用程序的开发采用ADO对象模型来实现。

    只是学习了一些皮毛,不对的地方欢迎大家指正!

    展开全文
  • VB ActiveX控件在InTouch数据库访问中的应用pdf,VB ActiveX控件在InTouch数据库访问中的应用
  • VB .NET 数据库访问

    2012-12-13 01:28:40
    VB.net 访问数据库的开发技术.Visual Basic .NET 程序设计教程与实训第十章
  • vb怎么连接数据库

    2021-02-11 14:13:58
    vb怎么连接数据库[编辑]概述我们对数据库进行操作时,一方面要使用户可以在程序界面上对需要的数据进行访问;另一方面可以对数据库中的数据进行各种操作,最终的操作结果还要反馈给用户。一、Data控件1.设置数据控件...
  • 引言 作为微软旗下一款优秀的RAD工具,VB在数据库应用开发方面...微软设计了多种数据库访问方法,下面通过对VB访问数据库的多种技术进行深入剖析,并总结出实际开发的几点经验。希望能够对那VB的初学者有所帮助。...
  • ADO控件是最新的数据访问技术,访问更加简单和灵活,支持多种数据库,而且访问的数据类型也更为丰富,特别在Internet方面的应用可极大提高系统性能。如果需要用少量的代码来创建数据库应用程序,则建议使用该控件。...
  • Hook编程。如何安装钩子过程,如何编写全局钩子,动态连接库里的全局变量数据共享问题分析。ADO数据库编程。在VB中利用ADO控件和ADO对象访问数据库,在VC利用ADO技术访问数据库

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,679
精华内容 8,671
关键字:

vb中数据库的访问技术