一 致 的 数 据 访 问 技 术 ADO/OLE DB ( 五)
潘 爱 民( 接 上 期 )
六、 示 例 程 序
---- 至 此 我 们 已 经 全 面 介 绍 了Microsoft 一 致 数 据 访 问 技 术, 重 点 讲 述 了ADO 对 象 模 型 以 及 它 的 用 法, 最 后 我 们 通 过 一 个 简 单 的 例 子 来 说 明 用ADO 访 问 数 据 库 的 基 本 用 法。---- 例 程 序 在Visual Basic 环 境 下 完 成, 首 先 创 建 一 个 标 准 的EXE 工 程, 使 用 工 程 的 缺 省 表 单 浏 览 数 据 库。 我 们 把 工 程 名 改 为ADOSample, 把 表 单 名 改 为ADOSampleForm。 程 序 最 终 的 运 行 结 果 如 图1 所 示。
图1 例 程 序 运 行 界 面
---- 为 了 在 工 程 中 使 用ADO, 首 先 我 们 使 用"Project" 菜 单 下 的"References" 命 令, 选 中"Microsoft ActiveX Data Objects Library", 以 后 我 们 在 程 序 中 就 可 以 直 接 使 用ADO 的 对 象 了。
---- 接 下 去 我 们 使 用"Project" 菜 单 下 的"Components" 命 令 选 中"Microsoft FlexGrid Control" 控 制, 然 后 在 表 单 中 加 入FlexGrid 控 制, 我 们 使 用 缺 省 的 控 制 名MSFlexGrid1。
---- 为 了 简 化 程 序, 我 们 使 用 了Visual Studio 6.0 随 带 的Access 数 据 库 文 件Nwind.mdb, 在 程 序 中 加 入 连 接 串 定 义, 所 有 的 全 局 变 量 定 义 如 下:
Dim WithEvents cn As ADODB.Connection Dim cmd As ADODB.Command Dim rs As ADODB.Recordset Dim ConnectString As String当 程 序 启 动 时, 建 立 连 接 对 象, 代 码 如 下:
Private Sub Form_Load() Set cn = New ADODB.Connection On Error GoTo EH Const ConnectString = "Provider=Microsoft.Jet.OLEDB.3.51;" & "Data Source=c:\Program Files\Microsoft Visual Studio\vb98\Nwind.mdb" cn.ConnectionTimeout = 5 cn.CursorLocation = adUseClient cn.Open ConnectString, Options:=adAsyncConnect Exit Sub EH: Select Case Err Case 40002: MsgBox "Could not connect..." & Error Case Else Debug.Print Err, Error End Select End Sub当 连 接 完 成 后, 我 们 执 行 一 个 基 本 的 查 询 命 令, 并 调 用ConfigFlexGrid 函 数 配 置FlexGrid 控 制 的 显 示 格 式, 调 用ShowDataInFlexGrid 函 数 显 示 结 果 记 录 集, 下 面 是 连 接 对 象 的 事 件 控 制 函 数:
Private Sub Cn_ConnectComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection) Set cmd = New ADODB.Command cmd.CommandText = "Customers" cmd.CommandType = adCmdTable cmd.ActiveConnection = cn Set rs = cmd.Execute MSFlexGrid1.Visible = False ConfigFlexGrid ShowDataInFlexGrid MSFlexGrid1.Visible = True End Sub下 面 是ConfigFlexGrid 和ShowDataInFlexGrid 函 数 的 代 码:
Private Sub ConfigFlexGrid() MSFlexGrid1.Left = 0 MSFlexGrid1.Top = 0 MSFlexGrid1.Rows = 1 MSFlexGrid1.Cols = 8 MSFlexGrid1.Row = 0 MSFlexGrid1.Col = 1 MSFlexGrid1.ColWidth(0) = 300 MSFlexGrid1.ColWidth(1) = 1500 MSFlexGrid1.ColWidth(2) = 2500 MSFlexGrid1.ColWidth(3) = 1500 MSFlexGrid1.ColWidth(4) = 1500 MSFlexGrid1.ColWidth(5) = 1500 MSFlexGrid1.ColWidth(6) = 1200 MSFlexGrid1.ColWidth(7) = 1200 MSFlexGrid1.TextMatrix(0, 1) = "Customers ID" MSFlexGrid1.TextMatrix(0, 2) = "Company Name" MSFlexGrid1.TextMatrix(0, 3) = "Contact Name" MSFlexGrid1.TextMatrix(0, 4) = "Contact Title" MSFlexGrid1.TextMatrix(0, 5) = "City" MSFlexGrid1.TextMatrix(0, 6) = "Country" MSFlexGrid1.TextMatrix(0, 7) = "Phone" End Sub Private Sub ShowDataInFlexGrid() Dim strTemp As String On Error Resume Next MSFlexGrid1.Rows = 1 rs.MoveFirst Do While Not rs.EOF strTemp = "" strTemp = strTemp & vbTab & rs!CustomerID strTemp = strTemp & vbTab & rs!CompanyName strTemp = strTemp & vbTab & rs!ContactName strTemp = strTemp & vbTab & rs!ContactTitle strTemp = strTemp & vbTab & rs!City strTemp = strTemp & vbTab & rs!Country strTemp = strTemp & vbTab & rs!Phone MSFlexGrid1.AddItem strTemp rs.MoveNext Loop End Sub为 了 使 窗 口 大 小 调 整 时,FlexGrid 控 制 也 能 够 随 着 变 化, 响 应 表 单 的Resize 事 件, 事 件 控 制 函 数 如 下:
Private Sub Form_Resize() MSFlexGrid1.Width = Width - 100 MSFlexGrid1.Height = Height - 400 End Sub当 程 序 退 出 时, 做 基 本 的 清 理 工 作, 代 码 为:
Private Sub Form_Terminate() Set cn = Nothing Set cmd = Nothing Set rs = Nothing End Sub现 在 我 们 可 以 运 行 程 序 了, 读 者 可 以 试 一 试。
七、 结 束 语
---- 随 着 信 息 化 时 代 的 不 断 深 入, 信 息 处 理 和 信 息 共 享 变 得 越 来 越 重 要, 数 据 访 问 技 术 对 于 信 息 系 统 也 就 显 得 尤 为 重 要, 本 文 介 绍 了Microsoft 提 供 的 一 致 数 据 访 问(UDA) 技 术, 从 基 本 的 结 构 模 型 到 深 入 介 绍ADO 对 象 模 型, 并 从 应 用 的 角 度 分 析 了ADO 的 一 些 特 性, 最 后 通 过 例 程 序 展 示 了ADO 的 基 本 用 法。---- 本 文 旨 在 对UDA 技 术 作 一 个 基 本 介 绍, 由 于Internet 技 术 发 展 很 快, 有 些 最 新 的 技 术 在 本 文 中 没 有 涉 及 到, 有 兴 趣 的 读 者 可 以 查 阅 网 上 有 关 资 料。 希 望 文 中 所 讲 述 的 内 容 能 帮 助 读 者 更 好 地 理 解 和 使 用 这 种 技 术。
---- ( 全 文 完)
---- ( 作 者 地 址: 北 京 大 学 计 算 机 科 学 技 术 研 究 所,100871, 收 稿 日 期:1999.02)
---- 责 任 编 辑: 许 菊 芳 xu_jufang@ccw.com.cn
-