適用先: Access 2013、Office 2013
ここに示すコード例では、ADO を Microsoft OLE DB Provider for Internet Publishing と共に使用する方法を示します。 このシナリオでは、 Recordset 、 Record 、および Stream の各オブジェクトを使用して Internet Publishing Provider で発行されたリソースのコンテンツを表示する Visual Basic アプリケーションを作成します。
このシナリオを作成するには、次の手順が必要です。
- Visual Basic プロジェクトを設定します。
- [メイン] リスト ボックスを初期化します。
- [フィールド] リスト ボックスに値を設定します。
- [詳細] テキスト ボックスを設定します。
手順 1: Visual Basic プロジェクトを設定する
このシナリオでは、システムに Microsoft Visual Basic 6.0 以降、ADO 2.5 以降、および Microsoft OLE DB Provider for Internet Publishing がインストールされていることを前提としています。
ADO プロジェクトを作成する
Microsoft Visual Basic で、新規の標準 EXE プロジェクトを作成します。
From the Project menu, choose References.
[ Microsoft ActiveX データ オブジェクト 2.5 ライブラリ] を選択し、[OK] をクリック します。
メイン フォームにコントロールを挿入する
Form1 に ListBox コントロールを追加します。 Name プロパティを lstMain に設定します。
Form1 にもう 1 つの ListBox コントロールを追加します。 Name プロパティを lstDetails に設定します。
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 オブジェクトのインスタンスが作成されます。 Record
grec
は、ActiveConnection として指定された URL で開かれます。 URL が存在する場合は開かれますが、存在しない場合は作成されます。https://servername/foldername/
を環境の有効な URL に置き換える必要があることに注意してください。Recordset
grs
は、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 オブジェクトを宣言してインスタンス化し、
rec
rs
します。lstMain で選択されたリソースに対応する行は、
grs
の現在の行になります。 その後、[ 詳細 ] リスト ボックスがオフになり、rec
が開き、現在の行grs
がソースとして表示されます。リソースがコレクション レコード ( RecordType で指定) の場合、ローカル Recordset
rs
はrec
の子で開かれます。 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
にコピーします。