Share via


ストリームと永続性

Recordset オブジェクトに対して Save メソッドを使って Recordset をファイルに格納または保持し、Open メソッドを使ってそのファイルから Recordset を復元します。

ADO 2.7 以降では、Save および Open メソッドを使って RecordsetStream オブジェクトに永続化することもできます。 この機能は、リモート データ サービス (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;  
    }  
...  

参照

Open メソッド (ADO Recordset)
Record オブジェクト (ADO)
Save メソッド