レコードを XML 形式で保持する
ADTG 形式と同様に、XML 形式での Recordset の保持は Microsoft OLE DB Persistence Provider によって実装されます。 このプロバイダーによって、保存されている XML ファイルから、または、ADO によって生成されたスキーマ情報を含むストリームから、順方向専用かつ読み取り専用の行セットが生成されます。 同様に、ADO Recordset を受け取り、XML を生成し、それをファイルに保存するか、COM IStream インターフェイスを実装するオブジェクトに保存できます。 (実際、ファイルは IStream をサポートするオブジェクトのもう 1 つの例に過ぎません)。バージョン 2.5 以降については、ADO では Microsoft XML Parser (MSXML) を利用して XML を Recordset に読み込みます。そのため、msxml.dll が必要になります。
注意
階層 Recordsets (データ シェイプ) を XML 形式で保存するとき、いくつかの制限が適用されます。 階層 Recordset に保留中の更新が含まれており、パラメーター化された階層 Recordset を保存できない場合は、XML に保存できません。 詳細については、「フィルター処理されたレコードセットおよび階層レコードセットの保持」を参照してください。
XML にデータを保持し、ADO 経由で再び読み込む最も簡単な方法は、Save メソッドと Open メソッドをそれぞれ使用することです。 次の ADO コード例では、Titles テーブルのデータを、titles.sav という名前のファイルに保存しています。
Dim rs as new Recordset
Dim rs2 as new Recordset
Dim c as new Connection
Dim s as new Stream
' Query the Titles table.
c.Open "provider=sqloledb;data source=MySQLServer;initial catalog=pubs;Integrated Security='SSPI'"
rs.cursorlocation = adUseClient
rs.Open "select * from titles", c, adOpenStatic
' Save to the file in the XML format. Note that if you don't specify
' adPersistXML, a binary format (ADTG) will be used by default.
rs.Save "titles.sav", adPersistXML
' Save the recordset into the ADO Stream object.
rs.save s, adPersistXML
rs.Close
c.Close
set rs = nothing
' Reopen the file.
rs.Open "titles.sav",,,,adCmdFile
' Open the Stream back into a Recordset.
rs2.open s
ADO では常に Recordset オブジェクト全体を保持します。 Recordset オブジェクトの行のサブセットを保持する場合、Filter メソッドを使用し、行を絞り込むか、選択句を変更します。 ただし、クライアント側カーソル (CursorLocation = adUseClient) で Recordset オブジェクトを開き、行のサブセットの保存に Filter メソッドを使用する必要があります。 たとえば、文字 "b" で始まるタイトルを取得する場合、オープン Recordset オブジェクトにフィルターを適用できます。
rs.Filter "title_id like 'B*'"
rs.Save "btitles.sav", adPersistXML
ADO では常に Client Cursor Engine 行セットを使用し、Persistence Provider によって生成される順方向専用データの上に、スクロールできてブックマークが付けられる Recordset オブジェクトを生成します。
このセクションでは、次のトピックを扱います。