您现在的位置: 天极网 > 开发频道 > 用VB和RDO访问SQL SERVER
全文

用VB和RDO访问SQL SERVER

2001-12-21 19:12作者:  出处:  责任编辑:方舟

  下面给出一个运行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的应用不过是访问数据库的一种手段而已。


共5页。 9 1 2 3 4 5

软件资讯·软件下载尽在天极软件

共5页。 首页 上一页 1 2 3 4 5
相关搜索:
相关文章及软件
关注此文读者还看过
热门关注
特别推荐
网友关注
软件下载
娱乐下载
驱动下载
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众