適用先: 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 オブジェクトを宣言してインスタンス化し、
recrsします。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にコピーします。