セッションと永続化
適用先: Access 2013、Office 2013
Recordset オブジェクト Save メソッドは Recordset をファイルに格納または永続化し、Open メソッドはそのファイルから Recordset を復元します。
ADO 2.5 では、 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 を Stream に XML 形式で永続化します。 その後、検査、操作、または表示できる文字列として 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 DataControl の新しいプロパティである URL は、 Recordset を生成する .asp ページを示します。 つまり、RDS でサーバー側 DataFactory オブジェクトを使用しなくても、またはユーザーがビジネス オブジェクトを作成しなくても、 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;
}
...