OLE在PB数据窗口中的实现在线教程
---- OLE(Object linking and Embedding), 即 对 象 连 接 与 嵌 入 简 称, 是 在Windows 环 境 下 实 现不 同Windows 实 用 程 序 之 间 共 享 数 据 和 程 序 功 能 的 一 种 方法。 在PowerBuilder( 简 称PB) 的 应 用 中 实 现OLE, PB 作 为OLE Container, 在 其 中 调 用OLE Server, 利 用OLE Server 提 供 的 功 能 来 显示 和 操 纵OLE 对 象。
---- PB 的 数 据 窗 口(DataWindow) 支 持OLE2.0。 在 其 中 可 建 立Blob(Binary Large Object 二 进 制 大 型 对象) 或image 类 型 的 字 段, 这 种 字 段 的 数 据 为 一OLE 对 象。 由于 数 据 窗 口 支 持OLE2.0, 因 此 在 使 用 时 你 需 要 保 证 你 要 用到 的OLE Server 也 要 支 持OLE2.0 对 象。 用 户 或 程 序 可 以 激 活 该OLE 字 段, 并 且 可 以 向OLE Server 发 送 简 单 的 命 令, 在PB 的 数 据窗 口 中, 你 可 以 建 立OLE 字 段。 一 个OLE 字 段 可 以 完 成 如 下功 能:
- 在 数 据 库 中 存 储OLE 对 象, 比 如Excel 电子 表 格 或Word for Windows 的 文 本 文 件。
- 把OLE 对 象 从 数 据 库 中 提 取 到 数 据 窗口。
- 使 用OLE Server, 比 如Excel 或Word for Windows 来 修改 数 据。
- 将 修 改 过 的 数 据 存 入 数 据 库。
---- 下 文 将 结 合 一个 例 子 解 释 如 何 完 成 上 述 功 能。 在 数 据 库 中, 建 一 个表 中, 该 表 有 一 个image 类 型 的 字 段, 用 于 存 放Windows Paintbrush 编 辑 的bmp 图, PB 可 在 数 据 窗 口 中 提 取 该 表 的 记录, 并 把image 字 段 中 的bmp 图 显 示 在 窗 口 中, 然 后 通 过 在数 据 窗 中 双 点(Double Click) 该 图, 自 动 打 开Paintbrush 并 调 出bmp 图, 用 户 可 对 它 进 行 一 些 修 改 和 保 存 修 改 结 果。
---- 具 体 实 现 步 骤如 下:
---- 一. 建 立OLE 字 段
---- 在 本 例 中, 我 们就 建 立 一 个 表Paint, 内 含2 个 字 段, 一 个 字 段 名 为ID, 另 一个 字 段 名 称 作File。 进 入PB 的Database 画 笔 来 建 此 表。ID 字 段取type 为integer, 不 许 为 空;File 字 段type 为 Image, 可 为 空, 并 选ID 为 主 键. 注:File 字 段 的 数 据 类 型 即 为 所 谓Blob 类 型, 但 不 同DBMS 中 取 的 名 字 不 同, 如watcom SQL 称 为long birary, 而SQL Server 为Image 或Text。
---- 二. 设 置 Autocommit
---- 在 使 用SYBASE SQL Server 数 据 库 时, 含 有OLE 字 段 的DataWindow 所 使 用 的Transaction Object( 事 务 对 象) 中 的AutoCommit 项 必 须 置 为TRUE, 在 设 计DataWindow 前, 可 通 过Preference 画 笔, 选 择Database 图 标, 将 其 中 的Autocommit 项赋 值 为1.
---- 三. 设 计 数 据 窗口
---- 在DataWindow 画 笔中, 打 开 建 好 的Paint 表, 但 此 时 只 选 择ID 字 段 进 行 显 示, 而先 不 要 选 择file 字 段( 我 们 将 在 设 计 窗 口 中 再 添 加 此 字段)。DataWindow 的 设 计 窗 口, 从Objects 菜 单 中 选 择OLE Database Blob 项, 然 后 在 设 计 窗 口 中 适 当 位 置 点 鼠 标 左 键, 此 时Database Birary/Text Large Object 对 话 窗 显 示 出 来。 逐 项 填 写 对 话 窗:
---- 在Name 项, 填 入 适当 名 字, 此 项 可 选, 但 起 了 名 字 后, 可 使 你 在 程 序 中 引用。
---- 在Client Class 中 填入DataWindow, 可 选 。
---- 在Client Name 中 填入 当 前DataWindow 的 名 字, 可 选 。
---- 在Table 中 选 择Paint 表 。
---- 在Large Binary/Text Columns 中, 选 择file 字 段 。
---- 在Key Clause 中, 选id=:id, 该 项 用 于 构 造where 子 句, 即where id=:id, 用 于 定 位 相 应 记 录。
---- 在File template 中, 填 入 一 个bmp 文 件 名, 或 通 过Browse 键 来 查 找 一 个 文 件, 比 如我 们 选 择arcade.bmp。
---- 在OLE Class,Description (Only Class is Used) 中, 通 过 下 拉 菜 单 选 择Paintbrush。
---- 在Client Name Exdivssion: 中, 填 入 某 一 字 符 串 表 达 式, 该 表 达 式 将 OLE Server 运 行 时, 显 示 在 其Title 处, 如 填 入".BMP File"+String(id)
---- 按OK 键 。
---- 此 时, PB 关 闭 该对 话 窗, 并 回 到DataWindow 的 设 计 窗 口,OLE 字 段 以 一 个 小 方 框的 形 式 显 示 出 来 。 一 般 情 况 当 你 运 行 该DataWindow 时, 上 述小 方 框 不 显 示 出 来。 因 此, 为 了 识 别 该OLE 字 段 在DataWindow 中 的 位 置, 我 们 可 以 在 该 小 方 框 后 摆 放 一 个 可 以 识 的东 西, 如 一 个 椭 圆 等 等, 因 此 在DataWindow 显 示 时, 我 们 只 要双 点 该 椭 圆, 即 可 激 活OLE Server。
---- 四. 预 浏 览(Preview)OLE 对 象
---- 在DataWindow 的 设计 窗 口 下, 点 按Preveiw 图 标, 然 后 点 按Insert 图 标, 在Paint 表 中添 加 一 行, 填 入id, 然 后 双 点 椭 圆, 此 时Paintbrush 被 激 活。 同时 打 开arcade.bmp, 做 一 些 修 改, 然 后 从Paintbrush 的File 菜 单 中选 择Update 项, 来 更 新 你 的 修 改, 此 时OLE Server 将 你 的 修 改 信息 送 回DataWindow, 然 后 通 过 选 择File 菜 单 中 的Close 项 关 闭Paintbrush 并 回 到DataWindow, 此 时 在 你 的DataWindow 中OLE 字 段 所 在 处 显 示出 了Paintbrush 所 画 的 图 标。 按Upd DB 图 标, 将OLE 数 据 存 入 数 据库 中. 以 后, 当 你 从 库 中 查 出Paint 表 中 的 记 录 时, 你 可 以通 过 双 点OLE 对 象 来 操 作 它, 方 法 同 上 。