流和暂留

适用于:Access 2013、Office 2013

Recordset 对象的 Save 方法用于将 Recordset 存储或持久化在文件中,Open 方法用于从该文件中还原 Recordset

通过 ADO 2.5,SaveOpen 方法还可以将 Recordset 持久化到 Stream 对象。 在使用远程数据服务 (RDS) 和 Active Server Pages (ASP) 时此功能尤为有用。

有关持久化如何在 ASP 页上自己使用的详细信息,请参阅当前的 ASP 文档。

以下几个方案显示了如何使用 Stream 对象和持久化。

方案 1

此方案只是将 Recordset 保存到文件,然后保存到 Stream。 随后,在另一个 Recordset 中打开持久化的流。

 
Dim rs1 As ADODB.Recordset 
Dim rs2 As ADODB.Recordset 
Dim stm As ADODB.Stream 
 
Set rs1 = New ADODB.Recordset 
Set rs2 = New ADODB.Recordset 
Set stm = New ADODB.Stream 
 
rs1.Open "SELECT * FROM Customers", "Provider=sqloledb;" & _ 
 "Data Source=MyServer;Initial Catalog=Northwind;" & _ 
 "Integrated Security=SSPI;""", adopenStatic, adLockReadOnly, adCmdText 
rs1.Save "c:\myfolder\mysubfolder\myrs.xml", adPersistXML 
rs1.Save stm, adPersistXML 
rs2.Open stm 

方案 2

此方案将 Recordset 以 XML 格式持久化在 Stream 中。 随后,将 Stream 读入一个您可以进行检查、操作或显示的字符串。

 
Dim rs As ADODB.Recordset 
Dim stm As ADODB.Stream 
Dim strRst As String 
 
Set rs = New ADODB.Recordset 
Set stm = New ADODB.Stream 
 
' Open, save, and close the recordset. 
rs.Open "SELECT * FROM Customers", "Provider=sqloledb;" & _ 
 "Data Source=MyServer;Initial Catalog=Northwind;" & _ 
 "Integrated Security=SSPI;""" 
rs.Save stm, adPersistXML 
rs.Close 
Set rs = nothing 
 
' Put saved Recordset into a string variable. 
strRst = stm.ReadText(adReadAll) 
 
' Examine, manipulate, or display the XML data. 
... 

方案 3

以下示例代码显示了将 Recordset 作为 XML 直接持久化到 Response 对象的 ASP 代码:

 
... 
<% 
response.ContentType = "text/xml" 
 
' Create and open a Recordset. 
Set rs = Server.CreateObject("ADODB.Recordset") 
rs.Open "select * from Customers", "Provider=sqloledb;" & _ 
 "Data Source=MyServer;Initial Catalog=Northwind;" & _ 
 "Integrated Security=SSPI;""" 
 
' Save Recordset directly into output stream. 
rs.Save Response, adPersistXML 
 
' Close Recordset. 
rs.Close 
Set rs = nothing 
%> 
... 

场景 4

在此方案中,ASP 代码将 ADTG 格式的 Recordset 的内容写入客户端。 Microsoft Cursor Service for OLE DB 可以使用此数据创建断开的 Recordset

RDS DataControlURL 上的新属性指向生成 Recordset 的 .asp 页。 这表明即使没有使用服务器端 DataFactory 对象的 RDS 或编写业务对象的用户,也可以获得 Recordset 对象。 这大大简化了 RDS 编程模型。

以下是名为 https://server/directory/recordset.asp: 的服务器端代码:

 
<% 
Dim rs 
Set rs = Server.CreateObject("ADODB.Recordset") 
rs.Open "select au_fname, au_lname, phone from Authors", ""& _ 
 "Provider=sqloledb;Data Source=MyServer;" & _ 
 "Initial Catalog=Pubs;Integrated Security=SSPI;" 
response.ContentType = "multipart/mixed" 
rs.Save response, adPersistADTG 
%> 

客户端代码:

 
<HTML> 
<HEAD> 
<TITLE>RDS Query Page</TITLE> 
</HEAD> 
<body> 
<CENTER> 
<H1>Remote Data Service 2.5</H1> 
<TABLE DATASRC="#DC1"> 
 <TR> 
 <TD><SPAN DATAFLD="au_fname"></SPAN></TD> 
 <TD><SPAN DATAFLD="au_lname"></SPAN></TD> 
 <TD><SPAN DATAFLD="phone"></SPAN></TD> 
 </TR> 
</TABLE> 

<BR> 
 
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33" 
 ID=DC1 HEIGHT=1 WIDTH = 1> 
 <PARAM NAME="URL" VALUE="https://server/directory/recordset.asp"> 
</OBJECT> 
 
</SCRIPT> 
</BODY> 
</HTML> 

开发人员还可以选择在客户端上使用 Recordset 对象:

... 
function GetRs() 
 { 
 rs = CreateObject("ADODB.Recordset"); 
 rs.Open "https://server/directory/recordset.asp" 
 DC1.SourceRecordset = rs; 
 } 
...