次の方法で共有


Internet Publishing シナリオ

適用先: Access 2013、Office 2013

ここに示すコード例では、ADO を Microsoft OLE DB Provider for Internet Publishing と共に使用する方法を示します。 このシナリオでは、 RecordsetRecord 、および Stream の各オブジェクトを使用して Internet Publishing Provider で発行されたリソースのコンテンツを表示する Visual Basic アプリケーションを作成します。

このシナリオを作成するには、次の手順が必要です。

  1. Visual Basic プロジェクトを設定します。
  2. [メイン] リスト ボックスを初期化します。
  3. [フィールド] リスト ボックスに値を設定します。
  4. [詳細] テキスト ボックスを設定します。

手順 1: Visual Basic プロジェクトを設定する

このシナリオでは、システムに Microsoft Visual Basic 6.0 以降、ADO 2.5 以降、および Microsoft OLE DB Provider for Internet Publishing がインストールされていることを前提としています。

ADO プロジェクトを作成する

  1. Microsoft Visual Basic で、新規の標準 EXE プロジェクトを作成します。

  2. From the Project menu, choose References.

  3. [ Microsoft ActiveX データ オブジェクト 2.5 ライブラリ] を選択し、[OK] をクリック します

メイン フォームにコントロールを挿入する

  1. Form1 に ListBox コントロールを追加します。 Name プロパティを lstMain に設定します。

  2. Form1 にもう 1 つの ListBox コントロールを追加します。 Name プロパティを lstDetails に設定します。

  3. Form1 に TextBox コントロールを追加します。 Name プロパティを txtDetails に設定します。

手順 2: メイン リスト ボックスを初期化する

グローバルな Record オブジェクトと Recordset オブジェクトを宣言する

  • Form1 の (General) (Declarations) に次のコードを挿入します。

    
      Option Explicit 
      Dim grec As Record 
      Dim grs As Recordset 
    

    このコードによって、このシナリオで後ほど使用する Record オブジェクトと Recordset オブジェクトへのグローバル オブジェクト参照を宣言します。

URL に接続して lstMain を設定する

  • Form1 の Form Load イベント ハンドラーに次のコードを挿入します。

    
      Private Sub Form_Load() 
          Set grec = New Record 
          Set grs = New Recordset 
          grec.Open "", "URL=https://servername/foldername/", , _ 
              adOpenIfExists Or adCreateCollection 
          Set grs = grec.GetChildren 
          While Not grs.EOF 
              lstMain.AddItem grs(0) 
              grs.MoveNext 
          Wend 
      End Sub 
    

    このコードによって、グローバルな Record オブジェクトと Recordset オブジェクトのインスタンスが作成されます。 Recordgrec は、ActiveConnection として指定された URL で開かれます。 URL が存在する場合は開かれますが、存在しない場合は作成されます。

    https://servername/foldername/を環境の有効な URL に置き換える必要があることに注意してください。

    Recordsetgrs、Recordgrec の子に対して開かれます。 その後、lstMain には、URL に発行されたリソースのファイル名が設定されます。

手順 3: [フィールド] リスト ボックスを設定する

  • lstMain の Click イベント ハンドラーに次のコードを挿入します。

    
      Private Sub lstMain_Click() 
          Dim rec As Record 
          Dim rs As Recordset 
          Set rec = New Record 
          Set rs = New Recordset 
          grs.MoveFirst 
          grs.Move lstMain.ListIndex 
          lstDetails.Clear 
          rec.Open grs 
          Select Case rec.RecordType 
              Case adCollectionRecord: 
                  Set rs = rec.GetChildren 
                  While Not rs.EOF 
                      lstDetails.AddItem rs(0) 
                      rs.MoveNext 
                  Wend 
              Case adSimpleRecord: 
                  recFields rec, lstDetails, txtDetails 
    
              Case adStructDoc: 
          End Select 
    
      End Sub 
    

    このコードは、ローカルの Record オブジェクトと Recordset オブジェクトを宣言してインスタンス化し、recrsします。

    lstMain で選択されたリソースに対応する行は、 grsの現在の行になります。 その後、[ 詳細 ] リスト ボックスがオフになり、 rec が開き、現在の行 grs がソースとして表示されます。

    リソースがコレクション レコード ( RecordType で指定) の場合、ローカル Recordsetrsrecの子で開かれます。 lstDetails には、 rsの行の値が入力されます。

    リソースが単純なレコードの場合は、 recFields が呼び出されます。 recFieldsの詳細については、次の手順を参照してください。

    リソースが構造化ドキュメントである場合は、コードは実装されません。

手順 4: [詳細] テキスト ボックスを設定する

  • recFields という名前の新しいサブルーチンを作成し、次のコードを挿入します。

    
      Sub recFields(r As Record, l As ListBox, t As TextBox) 
          Dim f As Field 
          Dim s As Stream 
          Set s = New Stream 
          Dim str As String 
    
          For Each f In r.Fields 
              l.AddItem f.Name & ": " & f.Value 
          Next 
          t.Text = "" 
          If r!RESOURCE_CONTENTCLASS = "text/plain" Then 
              s.Open r, adModeRead, adOpenStreamFromRecord 
              str = s.ReadText(1) 
              s.Position = 0 
              If Asc(Mid(str, 1, 1)) = 63 Then '//63 = "?" 
                  s.Charset = "ascii" 
                  s.Type = adTypeText 
              End If 
              t.Text = s.ReadText(adReadAll) 
          End If 
      End Sub 
    

    このコードは、 recFieldsに渡される単純なレコードのフィールドと値を lstDetails に設定します。 リソースがテキスト ファイルである場合は、テキスト Stream がリソース レコードから開かれます。 コードは、文字セットが ASCII であるかどうかを判断し、 Stream コンテンツを txtDetails にコピーします。