[HOWTO] ADO レコードセット、レコード、およびストリーム オブジェクトを使用してドキュメントを開く方法


概要


Microsoft OLE DB Provider for Internet Publishing を使用すると、ADO レコードおよび ADO レコードセット内にフォルダやドキュメントを開くことができます。1 つの ADO レコード オブジェクトは、レコードセット内の 1 つの行、またはレコードセット内に直接開かれている 1 つのドキュメントまたはフォルダを表すことができます。ADO ストリーム オブジェクトはメモリ内の 1 つのファイルを表します。このオブジェクトを使用して、レコード オブジェクトに含まれているドキュメントを表示できます。

詳細


1 つの ADO レコード オブジェクトはレコードセット内の 1 つの行を表すことも、1 つのドキュメントまたはフォルダを表すこともできます。以下のサンプル コードは、ADO レコードセット内の 1 つの行からレコードを開く方法と、ドキュメント上のレコードを直接開く方法を示しています。Command1 をクリックすると、ADO レコードセット内にドキュメントが開かれます。その後、レコード オブジェクトを使用して、ドキュメントを含むレコードセットの行が取得されます。Command2 をクリックすると、ドキュメントが直接 ADO レコード オブジェクト内に開かれます。いずれの場合も、レコード上ではストリーム オブジェクトが開かれています。ストリームはメモリ上のファイルを表すため、ストリームを利用してファイルの表示などのアクションを実行することができます。


ADO にドキュメントが見えるようにするため、ドキュメントをインターネット インフォメーション サービスの仮想ディレクトリに入れておく必要があります。また、サーバーでは Windows 2000 以降のオペレーティング システム上でインターネット インフォメーション サービス 5.0 以降が実行されている必要があります。クライアントには Internet Explorer 5 以降がインストールされている必要があります。


以下のサンプル コードでは、Test という名前の仮想ディレクトリにある Test.txt という名前のドキュメントを使用します。この仮想ディレクトリには、他のフォルダやドキュメントが含まれていてもかまいません。
  1. Visual Basic で標準 EXE プロジェクトを新規作成します。デフォルトで Form1 が作成されます。
  2. [プロジェクト] メニューの [参照設定] で、Microsoft ActiveX Data Objects Library への参照を設定します。
  3. Form 1 にコマンド ボタンを 2 つ追加します。デフォルトで Command1 と Command2 が作成されます。
  4. Form1 にテキスト ボックスを追加します。デフォルトで Text1 が作成されます。Text1 のプロパティを開き、[Multiline] を [True] に、[Scrollbars] を [3 - 両方] に設定します。
  5. Form1 のコード ウィンドウを開き、一般宣言セクションに次のコードを貼り付けます。
       Private Sub Command1_Click()
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset

    Dim rec As ADODB.Record
    Set rec = New ADODB.Record

    Dim stm As ADODB.Stream
    Set stm = New ADODB.Stream

    'テキスト ボックスをクリアします。
    Text1.Text = ""

    'Internet Publishing プロバイダでは、サーバー側カーソルを使用する必要があります。
    rs.CursorLocation = adUseServer

    'ドキュメントまたはフォルダを開く場合は adCmdTableDirect を指定します。
    rs.Open "test.txt", "Provider=MSDAIPP.DSO;" & _
    "Data Source=http://localhost/test", _
    adOpenForwardOnly, adLockReadOnly, adCmdTableDirect

    'レコードセット内の現在の行をレコードに読み込みます。
    rec.Open rs

    'RESOURCE_CONTENTCLASS クラスを使用してドキュメントの種類を判別できます
    'この例の場合は text/plain となります。
    Text1.Text = rec.Fields("RESOURCE_CONTENTCLASS").Value

    'ADO ストリームの種類は Text または Binary のいずれかです。
    stm.Type = adTypeText

    'テキストの表示に使用する文字セットを指定する必要があります。
    stm.Charset = "Shift_JIS"

    'レコードをストリームに読み込みます。
    stm.Open rec, adModeRead, adOpenStreamFromRecord

    'ここでストリームをテキスト ボックスに読み込みます。
    'テキストの場合はストリームの ReadText メソッド、バイナリの場合は Read メソッドを使用します。
    Text1.Text = Text1.Text & vbCrLf & stm.ReadText
    stm.Close
    Set stm = Nothing

    rec.Close
    Set rec = Nothing

    rs.Close
    Set rs = Nothing

    End Sub
    Private Sub Command2_Click()

    Dim rec As ADODB.Record
    Set rec = New ADODB.Record

    Dim stm As ADODB.Stream
    Set stm = New ADODB.Stream

    'テキスト ボックスをクリアします。
    Text1.Text = ""

    '代替接続文字列です。
    'プロバイダを指定している場合、URL 構文は使用できません。
    'URL 構文を使用すると MSDAIPP.DSO が想定されるため、
    'プロバイダは指定できません。
    rec.Open "test.txt", "URL=http://localhost/test", , , _
    adCmdTableDirect

    stm.Type = adTypeText
    stm.Charset = "Shift_JIS"
    stm.Open rec, adModeRead, adOpenStreamFromRecord

    Text1.Text = stm.ReadText

    stm.Close
    Set stm = Nothing

    rec.Close
    Set rec = Nothing

    End Sub

関連情報


ADO レコードおよびストリームを使用してフォルダやドキュメントを開くためのさらに高度なサンプルについては、次のサイトを参照してください。


Internet Publishing Scenario

「Internet Publishing Scenario」のサイトを参照するには、MSDN ライブラリで次の文字列を検索します。
Internet Publishing scenario(ADO) 
ADO レコードセット内にドキュメントを開く接続文字列のサンプルについては、以下の「サポート技術情報」 (Microsoft Knowledge Base) を参照してください。
245359 HOWTO:Open Connection Strings for different ADO objects
Microsoft ActiveX データ オブジェクトに関する完全なドキュメントを参照するには、次の Web サイトにアクセスしてください。


Microsoft ActiveX Data Objects

関連情報


この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 248255 (最終更新日 2003-05-08) を基に作成したものです。


この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。