Compartir a través de


Flujos y persistencia

Se aplica a: Access 2013, Office 2013

El método Save del objeto Recordset guarda o persiste un objeto Recordset en un archivo, y el método Open restaura el objeto Recordset de ese archivo.

Con ADO 2.5, los métodos Save y Open también pueden persistir un objeto Recordset en un objeto Stream. Esta característica es especialmente útil al trabajar con el Servicio de datos remoto (RDS) y páginas Active Server (ASP).

Para obtener más información sobre cómo utilizar la persistencia en páginas ASP, vea la documentación de ASP.

A continuación se describen algunos escenarios que muestran cómo se pueden utilizar los objetos Stream y la persistencia.

Escenario 1

En este escenario se guarda simplemente un objeto Recordset en un archivo y, a continuación, en un objeto Stream. A continuación, se abre la secuencia guardada en otro objeto 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 

Escenario 2

En este escenario se persiste un objeto Recordset en un objeto Stream con formato XML. A continuación, se lee el objeto Stream en una cadena que se puede examinar, manipular o mostrar.

 
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. 
... 

Escenario 3

En este código de ejemplo se muestra cómo código ASP almacena un objeto Recordset como XML directamente en el objeto Response:

 
... 
<% 
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 
%> 
... 

Escenario 4

En este escenario, código ASP escribe el contenido del objeto Recordset con formato ADTG en el cliente. El Servicio de cursores de Microsoft para OLE DB puede utilizar estos datos para crear un objeto Recordset desconectado.

Una nueva propiedad en el objeto DataControl de RDS, URL, señala la página .asp que genera el objeto Recordset. Esto significa que se puede obtener un objeto Recordset sin que RDS use el objeto DataFactory del servidor o sin que el usuario escriba un objeto de negocio. De este modo, se simplifica considerablemente el modelo de programación de RDS.

Código de servidor, que se denomina 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 
%> 

Código de cliente:

 
<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> 

Los programadores también pueden usar un objeto Recordset en el cliente:

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