ストリームと永続性
Recordset オブジェクトに対して Save メソッドを使って Recordset をファイルに格納または保持し、Open メソッドを使ってそのファイルから Recordset を復元します。
ADO 2.7 以降では、Save および Open メソッドを使って 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 コードで Recordset の内容を ADTG 形式でクライアントに書き込んでいます。 Microsoft Cursor Service for OLE DB からこのデータを使って、切断された Recordset を作成できます。
RDS DataControl の新しいプロパティである URL を使うと、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;
}
...