多重纪录集Multiple Recordset的应用

原创 2004年08月07日 10:45:00

有时候你会遇到这样的情况,在同一网页中的资料是来自于好几个不同款的资料表, 因此你会为每一个资料表开一个 Recordset ,在这一篇文章将为你介绍另一个替代方案『多重纪录集 (Multiple Recordsets) 』。

  什么是 Multiple Recordsets
  什么是 Multiple Recordsets 呢!简单来说就是将多个 Select 指令合并为一个,而每一个别的指令都以分号(;)隔开, 用这个指令所开启的Recordsets 就是 Multiple Recordset!
  来看个例子,剧情如下:
  使用数据库:SQL 内建北风数据库
  目标:制作三个下拉式选单,分别为「职员名单」、「产品名单」、「产品类别清单」
  你可能会为每一个下拉式选单的创造工作各开启一个 Recordset,相信你一定会觉得很麻烦,又浪费系统资源 现在我们就来看看如何利用 Multiple Recordset 来简化工作
<%
'创造 Recordset 对象
Set oRs = Server.CreateObject("Adodb.Recordset")
'使用 OLEDB Provider, YourSQLServerName 请改为你的服务器名称
sConnString = "Provider=SQLOLEDB;" _
& "Data Source=YourSQLServerName;" _
& "Initial Catalog=northwind;" _
& "User Id=sa;Password="
'多重 Select 指令, 每个指令都以;隔开
sSQL = "select EmployeeID,FirstName from Employees " _
& "order by EmployeeID;" _
& "select ProductID,ProductName from Products " _
& "order by ProductID;" _
& "select CategoryID,CategoryName from Categories " _
& "order by CategoryID"
oRs.Open sSQL, sConnString, 0, 1
i = 1
'利用 Nothing 的特性来检查是否到达最后的 Recordset
Do While Not (oRs is Nothing)
Response.Write "<select name='s" & i & "'>"
& vbCrLf
Response.Write "<option value='>--- 请选择 ---" & vbCrLf
Do While Not oRs.EOF
Response.Write "<option value='" & oRs(0) & "'>"
_
& oRs(1) & vbCrLf
oRs.MoveNext
Loop
Response.Write "</select><p>" & vbCrLf
'将 Recordset 的 Pointer 向下移一位
Set oRs = oRs.NextRecordset
i = i + 1
Loop
%>
  一但我们开启了 Multiple Recordsets,便可以存取第一个 SQL 指令字符串所传回的结果,在外部的 Do Loop 循环中,由于 Multiple Recordsets 并没有类似 EOF 的属性,因此我们使用 Nothing 来判断是否已经到达最后一个 Recordset。而内部的 Do Loop
  循环和一般 Recordset 的处理方式一样,因此不多做说明。 当内部循环结束时,我们呼叫 NextRecordset 方法将 Multiple Recordset 的指针(Pointer)移到下一个 Recordset。

  Multiple Recordsets 的限制
  并不是在所有的数据库或是资料提供者 (Data Provider) 你都可以使用 Multiple Recordsets, 例如,在 Oracle 数据库你就无法使用,其实说穿了就是要用微软的解决方案 ADO+MSSQL 才是绝配,除此之外,也建议你使用 SQL OLEDB Provider,尽可能不要用 ODBC Driver,在某些状况下使用 ODBC Driver 会产生不必要的错误!
  希望这篇文章对你有帮助!

ADO中记录集recordSet的使用

_variant_t vUsername,vID,vname; //变量声明 _RecordsetPtr m_pRecordset;     //记录集 CString strid; _Conn...
  • u013513883
  • u013513883
  • 2014年08月20日 23:21
  • 1099

recordset记录集方式使用

作者:BY  www.gudianxiaoshuo.com 本文由 代码助手软件 整理发布 内容与本软件无关 更惬意的读、更舒心的写、更轻松的发布  秀色书文软件  可听、可读、可...
  • shuilan0066
  • shuilan0066
  • 2015年01月11日 10:59
  • 1775

ADO连接数据库时EOF、BOF的意义和用法

在做学生管理的过程中,多次运用BOF和EOF,使文章的逻辑更加的鲜明,刚开始理解不是很到位、有点小偏差,随着大家的交流与学习,逐渐加强了对其的认识,接下来大家共同学习!...
  • foreverhuylee
  • foreverhuylee
  • 2014年06月26日 14:51
  • 3078

vim-multiple-cursors:支持多重选取内容的 Vim 插件

http://top.jobbole.com/1370/ Sublime Text 编辑器的“多重选取”功能非常强大,支持“一处编辑,多处更改”。 自从有了 vim-multiple-curso...
  • zyaiwmy
  • zyaiwmy
  • 2017年01月19日 16:34
  • 188

CMSIS-RTOS 多重实例化Multiple Instances

为了简便起见,从这篇文章开始,题目不再增加ARM官方《CMSIS-RTOS教程》几个字。 多重实例化Multiple InstancesRTOS的一个有趣功能就是可以针对一个线程进行多个实例化,例如你...
  • sining87
  • sining87
  • 2016年11月20日 13:52
  • 960

Shader山下(二十一)多重变体(Multiple Variants)

Shader山下(二十)编译指令(Compilation Directives)介绍了如何使用编译指令,本文就专文介绍一下多重编译(multi_compile)指令。 我们可以使用multi_com...
  • ecidevilin
  • ecidevilin
  • 2016年10月21日 23:34
  • 2162

【一天一篇CPP】多继承及其二义性(multiple inheritance,也叫多重继承,但不是多层继承)

1. 前面讨论的是单继承,就是一个子类只有一个直接父类。但有时一个派生类可由两个或多个基类,派生类从两个或多个基类中继承所需的属性。【例如一个学生,既是班干,又是社团部长】 2. 形式:   clas...
  • qq363692146
  • qq363692146
  • 2013年10月11日 19:40
  • 596

记录集Recordset常用的属性和方法

n记录集Recordset常用的属性和方法。 1.AbsolutePosition属性 nAbsolutePosition返回当前指针值,如果是第1条记录,其值为0,该属性为只读属性。 2.Bo...
  • autumn20080101
  • autumn20080101
  • 2012年05月02日 12:19
  • 749

Recordset记录集对象的属性(一)

Recordset对象的作用是由数据库返回记录集。根据查询结果返回一个包含所查询数据的记录集,然后显示在页面上。因为删除、更新、添加操作不需要返回记录集,因此可以直接使用连接对象或是命令对象的Exex...
  • liuwei1128
  • liuwei1128
  • 2014年03月14日 21:34
  • 827

ADO中记录集recordSet的使用

_variant_t vUsername,vID,vname; //变量声明 _RecordsetPtr m_pRecordset;     //记录集 CString strid; _Conn...
  • u013513883
  • u013513883
  • 2014年08月20日 23:21
  • 1099
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多重纪录集Multiple Recordset的应用
举报原因:
原因补充:

(最多只允许输入30个字)