Database 版 (精华区)

发信人: mengy (LEAR DLLS 命令时,将从内存中清除), 信区: Database
标  题: VFP 中 的 数 据 压 缩 与 恢 复
发信站: 哈工大紫丁香 (2000年12月06日20:08:10 星期三), 站内信件

VFP 中 的 数 据 压 缩 与 恢 复 




---- 对 一 名VFP 程 序 员 来 说, 如 何 对 数 据 库 备 份 和 恢 复 恐 怕
 是 最 头 疼 的 问 题 了。 通 常 的 解 决 方 法 不 外 乎 这 么 几 种:1.
 调 用 压 缩 工 具 软 件 对 数 据 进 行 压 缩 备 份 和 恢 复;2. 利 用 
低 层 文 件 函 数 将 数 据 库 文 件 分 割 后 备 份 和 合 并 恢 复;3. 自
 行 开 发 压 缩 功 能 模 块。 这 些 方 法 要 么 效 率 不 高, 浪 费 存 
储 空 间; 要 么 界 面 不 够 美 观 和 直 观, 不 支 持 长 文 件 名, 程 
序 员 控 制 不 方 便; 不 懂 英 语 的 用 户 操 作 困 难; 要 么 开 发 难
 度 大, 通 用 性 不 佳, 不 利 于 数 据 的 交 流 和 转 移。 

---- 但 是 现 在, 有 两 个 小 东 西 把 我 从 烦 恼 中 解 脱 出 来 了。
 这 就 是 由Stephen Darlington 开 发, 可 以 完 成 压 缩、 解 压 缩 功 
能 的ActiveX 控 件:aZip32.ocx 和aUnZip32.ocx。 它 们 可 以 在VFP 中 注
 册, 象 其 他 标 准 控 件 一 样 使 用。aZip32.ocx 能 够 对 指 定 目 录
 下 的 数 据 进 行 压 缩, 生 成 标 准.zip 格 式 文 件; 支 持 文 件 类
 型 筛 选; 支 持 长 文 件 名 和 分 盘 压 缩; 即 时 显 示 压 缩 进 度;
aUnZip32.ocx 可 以 将 指 定 的.zip 格 式 文 件 解 压 缩 到 指 定 目 录 
中, 支 持 相 对 路 径 和 绝 对 路 径 方 式, 同 样 也 能 直 观 地 显 示
 解 压 缩 进 度。 

---- 下 面 就 对 这 两 个 控 件 的 使 用 方 法 及 其 重 要 属 性 作 一 
简 单 介 绍: 

---- 1. 控 件 注 册 

---- 首 先 将 这 两 个 控 件 连 同 许 可 文 件addZIP.lic 复 制 到
windows\system 目 录 下, 或 是 你 自 己 的 控 件 库 目 录 里。 然 后 启
 动VFP, 选 择 工 具/ 选 项/ 控 件/ActiveX 控 件, 按 下 添 加 按 钮, 
将azip32.ocx 和aunzip32.ocx 注 册。 然 后 这 两 个 控 件 就 出 现 在
ActiveX 控 件 列 表 中 了。 注 意, 要 将 这 两 个 控 件 名 称 左 边 的
 核 选 框 选 中, 以 确 保 它 们 能 够 被VFP 使 用。 由 于 这 两 个 控 
件 需 要MFC42.DLL 和MSVCRT.DLL 的 支 持, 因 此windows\system 目 录 下 
还 要 有 这 两 个 文 件。 如 果 你 开 发 的 系 统 里 使 用 了 这 两 个 
控 件, 那 么 在 定 制 安 装 程 序 时 不 要 忘 记 把 它 们 都 添 加 进 
去。 

---- 2. 创 建 示 例 表 单 

---- 新 建 一 个 表 单a, 然 后 在 表 单 控 件 工 具 条 上 单 击 查 看 
类 按 钮, 选 择ActiveX。 随 后 出 现 启 用 的ActiveX 工 具 条, 其 中+Z
 图 标 就 是 压 缩 控 件,-U 图 标 就 是 解 压 缩 控 件。 

---- 3. 添 加 一 个 压 缩 控 件 

---- 通 常 要 设 置 的 属 性 如 下: 

---- Abort: 中 断 压 缩 过 程 的 过 程。 

---- Appearance: 压 缩 控 件 的 外 观 设 置,0 是 平 面 方 式,1 是3D 方
 式。 本 例 采 用 默 认 值。 

---- ArchiveName: 要 生 成 的 压 缩 文 件 名。 本 例 设 为test.zip。 

---- CompressionLevel: 设 置 压 缩 速 率。0 是 不 压 缩,1 是 最 小 压 
缩,2 是 通 常 方 式 压 缩,3 是 最 大 方 式 压 缩。 默 认 值 是2。 本 
例 采 用 默 认 值。 Exclude: 不 压 缩 的 文 件。 默 认 值 是 空, 这 里
 填*.bak。 可 以 设 置 为 排 斥 多 种 类 型 的 文 件:*.ini|*.bat|*.
bak 等 等。 

---- Include: 要 压 缩 文 件 的 类 型。 默 认 值 是*.*( 当 前 目 录 下 
的 所 有 文 件)。 可 以 按 照 需 要 设 置 为*.dbf 等 等。 本 例 采 用 默
 认 值。 

---- IncludeListFile: 要 压 缩 文 件 的 列 表 文 件 名, 默 认 值 为 空
。 如 果 该 属 性 设 置 为filename.txt, 则 应 存 在 文 件filename.txt,
 并 且 它 的 内 容 应 当 是 要 压 缩 的 文 件 目 录 列 表, 每 一 项 单
 独 占 一 行, 例 如: 

c:\data\*.*
d:\data\data\*.*
d:\data\code\*.*
d:\data\vcx\*.dat

---- 通 过 这 种 方 法, 可 以 一 次 压 缩 多 个 不 同 目 录 下 的 数 据
 文 件。 本 例 设 置 为 空。 

---- name: 控 件 名 称。 本 例 设 置 为oZip。 

---- Password: 压 缩 包 的 保 护 口 令。 如 果 想 用 口 令 保 护 压 缩 
包, 则 必 须 填 写 口 令。 本 例 不 填 写。 

---- QueryDiskChange: 在 分 盘 压 缩 模 式 下, 需 要 更 换 磁 盘 事 件
 的 方 法。 本 例 不 作 使 用。 

---- QueryOverwrite: 提 示 是 否 覆 盖 已 经 存 在 数 据 时 的 事 件 方
 法。 本 例 使 用 控 件 的 默 认 过 程。 

---- recurse: 是 否 压 缩 指 定 目 录 的 子 目 录。 默 认 值 是.f., 本
 例 设 置 为.T.。 

---- span: 是 否 要 进 行 分 盘 压 缩。 默 认 值 是.f.。 本 例 采 用 默
 认 值。 

---- structure: 存 放 数 据 的 目 录 结 构 方 式。0 是 不 存 放,1 是 相
 对 路 径,2 是 绝 对 路 径。 默 认 值 是2, 本 例 采 用 默 认 值。 

---- style: 压 缩 进 度 的 显 示 风 格。0 是 标 准 风 格,1 是 分 段 风
 格,2 是 色 彩 过 渡 风 格。 默 认 值 是0。 本 例 设 置 为1。 

---- segments: 压 缩 进 度 条 分 段 数 目。 默 认 值 是10。 本 例 采 用
 默 认 值。 

---- ZipError Event: 压 缩 过 程 中 发 生 的 错 误 事 件, 用 户 可 以 
在 此 设 置 自 己 的 错 误 处 理 过 程。 本 例 使 用 控 件 的 默 认 过 
程。 

---- ZipWarning Event: 压 缩 过 程 中 发 生 的 警 告 性 事 件, 用 户 可
 以 在 此 设 置 对 警 告 事 件 的 处 理 过 程。 本 例 使 用 控 件 的 默
 认 过 程。 

---- Zipped Event: 压 缩 过 程 结 束 事 件, 用 户 可 以 在 此 设 置 提
 示 压 缩 完 成 信 息。 本 例 使 用 控 件 的 默 认 过 程。 

---- Zipping Event: 压 缩 过 程 正 在 进 行 时 的 事 件, 用 户 可 以 在
 此 设 置 提 示 正 在 压 缩 的 信 息。 本 例 使 用 控 件 的 默 认 过 程
。 

---- Update: 更 新 压 缩 数 据 包。 和Zip 方 法 的 作 用 基 本 相 同, 
但 只 压 缩 已 经 发 生 变 化 的 数 据。 

---- Version: 返 回 压 缩 控 件 的 版 本 号。 

---- 4. 添 加 一 个 解 压 缩 控 件 

---- 通 常 要 设 置 的 属 性 如 下: 

---- Abort: 中 断 解 压 缩 过 程 的 过 程。 

---- Appearance: 解 压 缩 控 件 的 外 观 设 置,0 是 平 面 方 式,1 是3D
 方 式。 本 例 采 用 默 认 值。 

---- ArchiveName: 要 还 原 的 压 缩 文 件 名, 默 认 值 为 空。 本 例 设
 为test.zip。 

---- ExtractTo: 将 数 据 恢 复 到 哪 个 目 录 下, 默 认 值 为 空。 本 
例 设 为c:\。 

---- Exclude: 不 恢 复 的 文 件, 默 认 值 是 空。 本 例 使 用 默 认 值
。 

---- Include: 要 恢 复 文 件 的 类 型。 默 认 值 是*.*( 恢 复 压 缩 包 
中 的 所 有 文 件)。 本 例 使 用 默 认 值。 

---- name: 控 件 名 称。 本 例 设 置 为oUnZip。 

---- Overwrite: 是 否 覆 盖 同 名 的 文 件。10 是 逐 一 询 问,11 是 覆
 盖 所 有 的 同 名 文 件,12 是 不 覆 盖。 本 例 使 用 默 认 值。 

---- Password: 压 缩 包 的 保 护 口 令。 如 果 压 缩 包 受 口 令 保 护,
 则 必 须 填 写 相 应 的 口 令 方 可 解 压 缩。 本 例 不 填 写。 

---- QueryDiskChange: 释 放 分 盘 压 缩 的 数 据 包 需 要 更 换 磁 盘 时
 的 事 件 方 法。 本 例 使 用 控 件 的 默 认 过 程。 

---- QueryOverwrite: 提 示 是 否 覆 盖 时 的 事 件 方 法。 本 例 使 用 
控 件 的 默 认 过 程。 

---- RestoreStructure: 是 否 按 照 数 据 的 目 录 结 构 进 行 恢 复。 默
 认 值 是.F., 本 例 设 置 为.T.。 

---- style: 解 压 缩 进 度 显 示 风 格。0 是 标 准 风 格,1 是 分 段 风
 格,2 是 色 彩 过 渡 风 格, 默 认 值 是0。 本 例 设 置 为2。 

---- segments: 解 压 缩 进 度 条 分 段 数 目。 默 认 值 是10。 本 例 采
 用 默 认 值。 

---- Test: 检 测 压 缩 文 件 是 否 正 常。 正 常 则 返 回.T., 否 则 返
 回.F.。 

---- Unzip: 解 压 缩 数 据 的 方 法。 

---- UnzipError Event: 解 压 缩 过 程 中 发 生 的 错 误 事 件, 可 以 在
 此 设 置 自 己 的 错 误 处 理 过 程。 本 例 使 用 控 件 的 默 认 过 程
。 

---- UnzipWarning Event: 解 压 缩 过 程 中 发 生 的 警 告 性 事 件, 可
 以 在 此 设 置 对 警 告 事 件 的 处 理 过 程。 本 例 使 用 控 件 的 默
 认 过 程。 

---- Unzipped Event: 解 压 缩 过 程 结 束 事 件, 可 以 在 此 设 置 提 
示 解 压 缩 完 成 信 息。 本 例 使 用 控 件 的 默 认 过 程。 

---- Unzipping Event: 解 压 缩 过 程 正 在 进 行 时 的 事 件, 可 以 在
 此 设 置 提 示 正 在 解 压 缩 的 信 息。 本 例 使 用 控 件 的 默 认 过
 程。 

---- Update: 更 新 被 释 放 的 数 据。 和Unzip 方 法 的 作 用 基 本 相 
同, 但 只 释 放 已 经 发 生 变 化 的 数 据。 

---- Version: 返 回 解 压 缩 控 件 的 版 本 号。 

---- 5. 将 这 两 个 控 件 的 外 观 都 调 整 为 进 度 条 样 式。 

---- 6. 添 加 按 钮, 调 整 属 性 如 下: 

---- caption: 压 缩 

---- name: cmdZip 

---- 为 它 的Click Event 方 法 添 加 如 下 代 码: 

---- THISFORM.oZip.update && 开 始 压 缩 当 前 目 录 下 所 有 的 数 据
=MESSAGEBOX(' 压 缩 完 毕 !') 

---- 7. 添 加 按 钮, 调 整 属 性 如 下: 

---- caption: 解 压 缩 

---- name: cmdUnzip 

---- 为 它 的Click Event 方 法 添 加 如 下 代 码: 

---- THISFORM.oUnZip.ExtractTo = "c:\tmp" 

---- && 将 数 据 恢 复 到c 盘 的Tmp 目 录 下。 如 果 想 原 样 恢 复 到
D 盘 上, 只 需 将 该 属 性 改 为"d:\ " 即 可。 

---- THISFORM.oUnZip.RestoreStructure = .T. 

---- && 按 照 原 来 的 目 录 层 次 恢 复 数 据 

---- THISFORM.oUnzip.update 

---- && 开 始 恢 复 指 定 的 压 缩 包 数 据 到 当 前 目 录 下 

---- =MESSAGEBOX(' 恢 复 完 毕 !') 

---- 8. 运 行 表 单a 

---- 通 过 单 击 压 缩 按 钮 和 解 压 缩 按 钮, 可 以 看 到 压 缩 和 解
 压 缩 的 进 度 动 态 显 示 直 到 最 终 完 成, 并 且 用 资 源 管 理 器
 可 以 看 到test.zip 文 件 的 生 成, 以 及 在c:\tmp 目 录 下 恢 复 出 
现 的 当 前 数 据( 如 果 有 子 目 录 的 话, 同 样 会 按 原 样 恢 复)。
 而 且, 用 其 他 解 压 缩 软 件 如pkunzip 及zipmagic 等 也 可 以 正 确
 地 释 放test.zip 文 件。 怎 么 样, 是 不 是 棒 极 了 ? 

---- 从 这 里 可 以 下 载 未 注 册 的 试 用 版(130KB)。 对 简 单 的 压 
缩 和 恢 复 数 据 库 工 作 来 说, 试 用 版 就 已 经 够 用 了。

 

本文来源: Computer World 本文作者: 王 海 军 王 海 涛 






--

       大海无边天做岸
               山登绝顶我为风

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.227.121]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:206.818毫秒