科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道用VB和RDO访问SQL SERVER

用VB和RDO访问SQL SERVER

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

远程数据对象 (Remote Data Object ,简称RDO) 是位于 ODBC API 之上的一个对象模型薄层。

作者:佚名 来源:论坛 2007年10月23日

关键字: SQL Server

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共5页)

下面给出一个运行rdoConnection对象Cn的OpenResultset方法的例子。

Dim Rs As Resultset
Set Rs = Cn.OpenResultset(name:=“SELECT * FROM Authors WHERE Year_Born=1966”)
If Rs.RowCount > 0 Then
MsgBox Rs.RowCount & “条记录取得完毕。”
Else
MsgBox “没有取得任何记录。”
End If

  这个例子中用了name:=,OpenResultset方法,除了name参数以外,也可以使用lock、 locktype、option等。下面是从Resultset中将数据读取到ListBox中的方法:

Do Until Rs.EOF
List1.AddItem Rs(“au_lname”)
Rs.MoveNext
Loop

  存储过程虽然不在本文讨论的范围内,这里也简单地介绍一下。存储过程基本上有以下4种类型:

{call myStoreProcedure} ' 没有参数的存储过程
{call myStoreProcedure(?)} ' 单一的输入或输出参数
{? = call myStoreProcedure(?)} ' 单一参数、有返回值
{? = call myStoreProcedure(?, ?)} ' 多个参数、有返回值

  下面演示一个运行存储过程的例子:

sp_GetVendorCount参数是名称的条件,其返回值为符合该条件的记录数。
Dim CPw As rdoQuery
Dim sSQL As String
SSQl = “{? = call sp_GetVendorCount(?)}”

  这里“名称的条件”是输入参数,由ODBC驱动器进行自动识别。使用rdoParameters(n).Direction可以对返回值(rdParamReturnValue)、输入参数 (rdParamInput) 、输出参数(rdParamOutput)和输入输出参数(rdParamInputOutput)加以控制。但通常ODBC都会读入存储过程的定义式,并加以正确识别,所以绝大多数的情况下不必使用这个参数。

Dim CPw = Cn.CreateQuery(“GetVendorCount”, sSQL)

  代码生成名为GetVendorCount的rdoQuery对象,并将rdoQuery对象自动增加到rdoQueries集合中,以后可以重复使用。

  现在将CPw对象的第一个参数指定为返回值:

CPw.rdoParameters(0).Direction = rdParamReturnValue

  最后由Execute方法运行:

CPw.Execute

  返回行的查询(存储过程中包含一个以上的SELECT)时,可使用OpenResultset方法。运行后,可通过rdoParameters集合取得返回值:

If CPw.rdoParameters(0) > 0 Then
MsgBox CPw.rdoParameters & “数据取得成功”
Else
MsgBox “数据读取失败”
End If

  数据的追加、更新、删除

  对SQL语句已经有一定了解的读者,应该比较熟悉INSERT、UPDATE、DELETE等语句。对于rdoConnection对象,虽然可以在OpenResultset的Name参数中直接代入SQL语句,用Execute方法运行,但没有充分利用RDO对象的长处。在rdoResultset中有AddNew、Edit、Update、Delete、MoveNext、MovePrevious、MoveFirst、MoveLast方法,与DAO/Jet相似,用起来非常便利。

  下面在先前的Resultset的例子中追加记录:

Rs.AddNew
Rs(“au_id”) = “111-46-1992”
Rs(“au_lname”) = “Takenami”
RS(“au_fname”) = “Teruo”
'设定所有的field,通常调用Call SetField,在别的模块中设定
Rs.Update

  与SQL语句中的INSERT相比起来,这种方法非常简单,而且代码可读性好。记录的更新方法如下,与追加相似,所不同的只有最初的Edit方法:

Rs.Edit
Rs(“au_lname”) = “Takenami”
RS(“au_fname”) = “Teruo”
'设定所有的field,通常调用Call SetField,在别的模块中设定
Rs.Update

  在实际应用中,字段的更新放在别的模块中,便于从AddNew、Edit两种处理中都可以进行调用。

  使用Delete方法删除记录时,当前行被删除。当前行可以通过MoveNext、MovePrevious等Move方法以及Bookmark属性设定。

    Rs.Delete '删除当前记录

  这里需要注意的是当前记录被删除之后记录指针的位置。Delete执行后,记录指针仍然指向已被删除的记录,也就是空的记录,对这个空记录进行读写操作会产生错误。所以通常在Delete之后应立即执行ReQuery或MoveNext操作:

   Rs.ReQuery 或 Rs.MoveNext

  以上简单地说明了数据的增加、更新、删除方法,根据数据库的模式的不同,增加、更新会变得非常复杂。另外,由于数据表的原因,有时会使得删除操作变得复杂。通常与数据表的构造、相关性有关的处理,为了使客户端的代码尽可能简洁,应在SQL Server上创建触发器。有关触发器的内容已超出了本文讨论的范围,这里不详细说明。本文介绍的只是一些基本的操作方法,RDO数据处理功能不仅限于此,读者可在实际开发中进一步领会。

  总结

  RDO是开发数据库应用程序功能强大的对象方法,要真正做到应用自如,需要付出很大努力。本文描绘了RDO基本的构成、功能、编程方式,希望读者由此对数据库编程方式以及RDO的使用有更为充分的了解。如果需要进一步研究,建议可以从以下几方面入手:

   * SQL Server(或Oracle)的功能,特别是存储过程、View、触发器、安全模式等;

   * 数据库设计基础;

   * SQL语句;

   * Visual Basic的对象概念。

  这些粗看起来与RDO没有什么联系,但实际上有助于对RDO的结构、原理等基本技术的理解。换而言之,学习数据库编程的基本内容为大前提,RDO或者ADO的应用不过是访问数据库的一种手段而已。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章