Internet 发布方案
适用于:Access 2013、Office 2013
此代码示例演示如何将 ADO 用于 Microsoft OLE DB Provider for Internet Publishing。 在此方案中,您将创建一个 Visual Basic 应用程序,该应用程序使用 Recordset 、 Record 和 Stream 对象来显示用 Internet Publishing Provider 发布的资源的内容。
下列步骤是创建该方案所必需的步骤:
- 设置 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 项目。
从“工程”菜单中,选择“引用”。
选择 “Microsoft ActiveX 数据对象 2.5 库”,然后单击“ 确定”。
在主窗体上插入控件
向 Form1 中添加一个 ListBox 控件。 将其 Name 属性设置为 lstMain。
向 Form1 中添加另一个 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 对象。 使用指定为 ActiveConnection 的 URL 打开记录
grec
。 如果该 URL 存在,则将打开 grec;如果该 URL 尚不存在,则将创建 grec。请注意,应将 替换为
https://servername/foldername/
环境中的有效 URL。记录集
grs
在记录的子级grec
上打开。 然后,将使用发布到 URL 的资源的文件名填充 lstMain。
步骤 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) 指定的集合记录 (,则会在 的
rec
子级上打开本地 Recordsetrs
。 然后,使用 行rs
中的值填充 lstDetails。如果资源是简单记录,
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
中。