-
vfp教程之利用Foxpro在网络环境下开发数据库管理
摘 要 本 文 将 笔 者 利 用 FoxPro 在 网 络 环 境 下 开 发 数 据 库 管 理 软 件 时 , 对 于 实 现 数 据 共 享 与 独 占 、 提 高 系 统 安 全 性 和 性 能 的 一 些 经 验 进 行 了 总 结 。 关 键 词 FoxPro 数 据 库 管 理 软 件 随 着 计 算 机 技 术 的 发 展 , 特 别 是 网 络 技 术 和 数 据 库 技 术 的 日 渐 成 熟 , 信 息 管 理 系 统 已 成 为 实 现 科 研 、 生 产 、 经 营 管 理 活 动 高 效 运 行 的 关 键 环 节 。 虽 然 有 ORACLE 、 SYBASE 等 优 秀 的 数 据 库 管 理 系 统 可 作 为 开 发 平 台 , 但 对 于 在 小 型 网 络 环 境 下 , 开 发 规 模 不 大 的 数 据 库 管 理 软 件 而 言 , 从 其 性 能 价 格 比 考 虑 , FoxPro 不 失 为 一 个 合 适 的 选 择 。 现 将 笔 者 利 用 FoxPro 在 网 络 环 境 下 开 发 数 据 库 管 理 软 件 的 一 些 经 验 总 结 如 下 ,供 大 家 参 考 。
1 、 多 用 户 环 境 下 文 件 的 共 享 和 独 占 的 实 现
( 1 ) 、当 你 要 访 问 的 文 件 或 记 录 不 想 再 让 其 他 用 户 访 问 时 ( 一 般 是 对 数 据 库 的 更 新 操 作 ) , 可 在 真 正 访 问 前 地 对 其 进 行 “ 加 锁 ” , 访 问 结 束 后 再 立 即 “ 解 锁 ” ; 或 者 以 独 占 方 式 打 开 该 数 据 库 文 件 进 行 访 问 。 笔 者 在 此 以 数 据 追 加 入 库 为 例 , 简 述 采 用 按 钮 形 式 实 现 “ 加 锁 ”- “ 解 锁 ” 的 方 法 。 此 方 法 的 优 点 在 于 : 当 加 锁 失 败 后 , 程 序 可 自 动 返 回 数 据 编 辑 屏 幕 ( 不 需 要 编 程 干 预 ) , 这 样 用 户 可 根 据 需 要, 再 适 时 地 单 击 “ 追 加 ” 按 钮 继 续 其 工 作 。 “ 追 加 入 库 ” 按 钮 的代 码 片 段 如 下 : ... set exclusive off use(locfile("z:\message\scxx\hytz","dbF","Where is hytz.dbf?")); AGAIN ALIAS hytz; ORDER 0 set reprocess to 0 ok=flock() && 加 锁 if ok && 成 功 锁 住 append from hytzi wait " 数 据 追 加 成 功 ! 按 任 意 键 继 续 !" window
unlock && 解 锁 else && 加 锁
失 败 wait " 文 件 已 被 其 他 用 户 使 用 , 请 稍 候 再 试 ! " window endif use set exclusive on ... 其 中 : hytz.dbf -- 服 务 器 上 的 目 标 数 据 库 表 hytzi.dbf -- 临 时 数 据 库 表
( 2 ) 、 当 你 要 访 问 的 文 件 或 记 录 允 许 其 他 用 户 访 问 时 ( 一般 为 数 据 库 的 检 索 操 作 ) , 以 共 享 方 式 打 开 该 数 据 库 文 件 即 可 。
以 检 索 hytz.dbf 数 据 为 例 。 打 开 hytz 的 数 据 查 询 屏 幕 , 在 SCREEN 的 Layout 项 中 , 点 取 Code 按 钮 , 在 Screen Setup Code 中 加 入 如 下 代 码 段
: ... SELECT 0 USE (LOCFILE("hytz","DBF","Where is hytz?")); AGAIN ALIAS hytz ; shared; && 共 享 方 式 打 开 ORDER 0 ... 建 议 将 系 统 的 数 据 检 索 与 数 据 更 新 分 为 两 个 子 系 统 进 行 设 计 和 编 码 , 这 样 便 于 在 程 序 中 对 EXCLUSIVE 的 值 进 行 设 置 ( 使 用 SET EXCLUSIVE 命 令 和 USE { EXCLUSIVE|SHARE } 命 令 ) 。 为 了 减 少 对 数 据 库 访 问 的 “ 碰 撞 ” , 可 定 时 ( 如 晚 上 ) 对 数 据 库 进 行 更 新 操 作 ( 这 可 由 系 统 管 理 员 来 完 成 ) 。
2 、 减 少 网 络 数 据 传 输 量 、 提 高 数 据 共 享 效 率
( 1 ) 、 将FOXPRO 软 件 、 应 用 程 序 、 部 分 不 需 共 享 的 数 据 存 放 在 网 络 工 作 站 本 地 硬 盘 上 , 只 将 需 要 共 享 的 数 据 库 存 放 在 网 络 服 务 器 上 的 共 享 目 录 下 。
( 2 ) 、 对 于 在 网 上 使 用 的 数 据 库 管 理 系 统 , 为 了 减 少 独 占 数 据 库 的 时 间 , 建 议 采 用 在 本 地 单 机 上 建 立 与 其 结 构 完 全 相 同 的 临 时 库 的 方 法 。 数 据 编 辑 在 临 时 库 中 进 行 , 待 数 据 编 辑 完 毕 并校 核 无 误 时 , 再 追 加 到 服 务 器 的 目 标 库 中 ; 数 据 查 询 时 , 首 先 将
满 足 条 件 的 数 据 从 服 务 器 中 提 取 到 临 时 库 中 , 然 后 对 其 结 果 进 所 需 操 作 。
3 、 安 全 性 措 施 在 数 据 库 系 统 中 , 由 于 数 据 大 量 集 中 存 放 , 为 多 用 户 直 接 共 享 , 从 而 使 得 安 全 性 问 题 更 为 突 出 。
( 1 ) 、为 了 保 护 数 据 库 以 防 止 不 合 法 的 使 用 , 对 于 那 些 已 获 得 上 机 权 的用 户 , 还 要 进 一 步 根 据 其 对 数 据 库 所 需 进 行 的 操 作 进 行 权 限 分 类, 以 保 证 其 只 能 按 其 权 限 对 相 应 的 数 据 进 行 访 问 , 而 不 能 越 权 。
( 2 ) 、 将 共 享 数 据 存 放 在 服 务 器 的 共 享 目 录 下 , 同 时 将 查 询 软 件 ( 该 查 询 系 统 只 有 具 有 查 询 权 限 的 用 户 方 可 进 入 ) 作 为 一 独 立 系 统 安 装 于 各 工 作 站 上 , 而 将 数 据 编 辑 软 件 ( 该 数 据 编 辑 系 统 只 有 具 有 数 据 编 辑 权 限 的 用 户 方 可 进 入 ) 安 装 于 数 据 源 点 处 的 工 作 站 上 。 用 户 的 权 限 由 网 络 操 作 系 统 和 系 统 管 理 员 控 制 。
4 、 充 分 利 用 Rushmore 技 术 提 高 网 络 环 境 下 数 据 库 操 作 速 度 Rushmore Technology 是 高 效 率 存 取 数 据 的 索 引 式 数 据 存 取 技 术 。 在 编 制 数 据 库 检 索 程 序 时 , 应 用 该 技 术 可 高 效 地 访 问 许 多 记 录 的 组 合 , 使 复 杂 的 数 据 库 操 作 速 度 提 高 成 百 上 千 倍 。 能 使 用 Rushmore 的 命 令 如 下 :
------------------------------------------------------ AVERAGE COPY TO ARRAY
EXPORT LOCATE SORT BROWSE COUNT INDEX RECALL SUM CALCULATE
DELETE JOIN REPLACE TOTAL CHANGE DISPLAY LABEL REPORT COPY TO
EDIT LIST SCAN ------------------------------------------------------ 但 编 程 人 员 必 须 牢 记 使 用 该 技 术 的 条 件 :
( 1 ) 、 使 用 上 表 的 命 令 必 须 包 含 有 一 个 FOR 参 数 , 且 FOR 参 数 中 的 条 件 运 算 式 必 须 是 一 个 最 优 化 运 算 式 。 而 且 , 要 给 可 加 搜 索 范 围 的 命 令 AVERAGE 、 SUM 、 LOACTE 、 SORT 等 加 上 ALL 或 NEXT 等 。 另 外 , 命 令 中 不 能 有 WHEN 参 数 。
( 2) 、 只 能 处 理 单 一 数 据 库 , 要 想 使 用 Rushmore 技 术 同 时 处 理 多 个 数 据 库 , 必 须 使 用 SQL 的 select 命 令 , 因 为 该 命 令 将 Rushmore 技 术 作 为 优 化 查 询 的 基 础 技 术 , 当 SQL 发 觉 需 要 索 引 时 , 即 自 动 创 建 临 时 索引 文 件 。
( 3 ) 、 在 上 表 的 命 令 中 若 指 定 了 NOOPTIMIZE 参 数 将 不 使
用 Rushmore 技 术 。
( 4 ) 、 在 FOXPRO 标 准 版 中 , 当 数 据 库 记 录 总 数 过 50 万 个 时 , Rushmore 无 效 。
5 、 数 据 库 的 数 据 冗 余 为 了 提 高 应 用 程 序 执 行 的 效 率 , 在 存 储 空 间 允 许 的 条 件 下 , 经 慎 重 考 虑 后 ,可 以 有 选 择 地 保 留 一 些 数 据 冗 余 , 也 可 在 数 据 库 中 保 留 那 些 使 用频 率 特 别 高 、 计 算 费 时 的 结 果 。
6 、 其 它
( 1 ) 、 为 尽 量 避 免 编 程的 重 复 工 作 , 减 少 硬 盘 空 间 的 占 用 量 , 在 系 统 设 计 过 程 中 要 进 行 综 合 分 析 , 提 取 相 似 点 , 编 制 通 用 的 程 序 , 便 于 程 序 重 用 。
( 2 ) 、 对 界 面 的 要 求 为 了 提 高 整 个 网 络 环 境 下 系 统 的 人 机 交 互 性 和 可 操 作 性 , 用 户 界 面 应 具 有 可 靠 性 、 简 单 性 和 立 即 反 馈 特 性 。 . 可 靠 性 : 指 界 面 要 具 有 一 定 的 容 错 能 力 , 能 及 时 正 确 地 给 出 运 行 状 态 指 示 和 出 错 信 息 , 并 引 导 用 户 改 正 错 误 ; . 简 单 性 : 尽 量 减 少 用 户 负 担 , 即 操 作 方 式 简 单 , 容 易 记 忆 , 输 入 / 输 出 容 易 理 解 ; 立 即 反 馈 : 对 用 户 的 应 用 请 求 都 应 在 用 户 心 理 许 可 的 时 间 范 围 内 给 出 响 应 , 即 使 不 能 得 到 结 果 , 也 应 给 出 某 种 信 息 以 缓 和 用 户 等 待 心 理 。 笔 者 采 用 以 上 方 法 , 已 成 功 完 成 了 多 个 网 络 环 境 下 综 合 信 息 管 理 系 统 的 开 发 , 收 到 了 很 好 的 效 果 。
1 、 多 用 户 环 境 下 文 件 的 共 享 和 独 占 的 实 现
( 1 ) 、当 你 要 访 问 的 文 件 或 记 录 不 想 再 让 其 他 用 户 访 问 时 ( 一 般 是 对 数 据 库 的 更 新 操 作 ) , 可 在 真 正 访 问 前 地 对 其 进 行 “ 加 锁 ” , 访 问 结 束 后 再 立 即 “ 解 锁 ” ; 或 者 以 独 占 方 式 打 开 该 数 据 库 文 件 进 行 访 问 。 笔 者 在 此 以 数 据 追 加 入 库 为 例 , 简 述 采 用 按 钮 形 式 实 现 “ 加 锁 ”- “ 解 锁 ” 的 方 法 。 此 方 法 的 优 点 在 于 : 当 加 锁 失 败 后 , 程 序 可 自 动 返 回 数 据 编 辑 屏 幕 ( 不 需 要 编 程 干 预 ) , 这 样 用 户 可 根 据 需 要, 再 适 时 地 单 击 “ 追 加 ” 按 钮 继 续 其 工 作 。 “ 追 加 入 库 ” 按 钮 的代 码 片 段 如 下 : ... set exclusive off use(locfile("z:\message\scxx\hytz","dbF","Where is hytz.dbf?")); AGAIN ALIAS hytz; ORDER 0 set reprocess to 0 ok=flock() && 加 锁 if ok && 成 功 锁 住 append from hytzi wait " 数 据 追 加 成 功 ! 按 任 意 键 继 续 !" window
unlock && 解 锁 else && 加 锁
失 败 wait " 文 件 已 被 其 他 用 户 使 用 , 请 稍 候 再 试 ! " window endif use set exclusive on ... 其 中 : hytz.dbf -- 服 务 器 上 的 目 标 数 据 库 表 hytzi.dbf -- 临 时 数 据 库 表
( 2 ) 、 当 你 要 访 问 的 文 件 或 记 录 允 许 其 他 用 户 访 问 时 ( 一般 为 数 据 库 的 检 索 操 作 ) , 以 共 享 方 式 打 开 该 数 据 库 文 件 即 可 。
以 检 索 hytz.dbf 数 据 为 例 。 打 开 hytz 的 数 据 查 询 屏 幕 , 在 SCREEN 的 Layout 项 中 , 点 取 Code 按 钮 , 在 Screen Setup Code 中 加 入 如 下 代 码 段
: ... SELECT 0 USE (LOCFILE("hytz","DBF","Where is hytz?")); AGAIN ALIAS hytz ; shared; && 共 享 方 式 打 开 ORDER 0 ... 建 议 将 系 统 的 数 据 检 索 与 数 据 更 新 分 为 两 个 子 系 统 进 行 设 计 和 编 码 , 这 样 便 于 在 程 序 中 对 EXCLUSIVE 的 值 进 行 设 置 ( 使 用 SET EXCLUSIVE 命 令 和 USE { EXCLUSIVE|SHARE } 命 令 ) 。 为 了 减 少 对 数 据 库 访 问 的 “ 碰 撞 ” , 可 定 时 ( 如 晚 上 ) 对 数 据 库 进 行 更 新 操 作 ( 这 可 由 系 统 管 理 员 来 完 成 ) 。
2 、 减 少 网 络 数 据 传 输 量 、 提 高 数 据 共 享 效 率
( 1 ) 、 将FOXPRO 软 件 、 应 用 程 序 、 部 分 不 需 共 享 的 数 据 存 放 在 网 络 工 作 站 本 地 硬 盘 上 , 只 将 需 要 共 享 的 数 据 库 存 放 在 网 络 服 务 器 上 的 共 享 目 录 下 。
( 2 ) 、 对 于 在 网 上 使 用 的 数 据 库 管 理 系 统 , 为 了 减 少 独 占 数 据 库 的 时 间 , 建 议 采 用 在 本 地 单 机 上 建 立 与 其 结 构 完 全 相 同 的 临 时 库 的 方 法 。 数 据 编 辑 在 临 时 库 中 进 行 , 待 数 据 编 辑 完 毕 并校 核 无 误 时 , 再 追 加 到 服 务 器 的 目 标 库 中 ; 数 据 查 询 时 , 首 先 将
满 足 条 件 的 数 据 从 服 务 器 中 提 取 到 临 时 库 中 , 然 后 对 其 结 果 进 所 需 操 作 。
3 、 安 全 性 措 施 在 数 据 库 系 统 中 , 由 于 数 据 大 量 集 中 存 放 , 为 多 用 户 直 接 共 享 , 从 而 使 得 安 全 性 问 题 更 为 突 出 。
( 1 ) 、为 了 保 护 数 据 库 以 防 止 不 合 法 的 使 用 , 对 于 那 些 已 获 得 上 机 权 的用 户 , 还 要 进 一 步 根 据 其 对 数 据 库 所 需 进 行 的 操 作 进 行 权 限 分 类, 以 保 证 其 只 能 按 其 权 限 对 相 应 的 数 据 进 行 访 问 , 而 不 能 越 权 。
( 2 ) 、 将 共 享 数 据 存 放 在 服 务 器 的 共 享 目 录 下 , 同 时 将 查 询 软 件 ( 该 查 询 系 统 只 有 具 有 查 询 权 限 的 用 户 方 可 进 入 ) 作 为 一 独 立 系 统 安 装 于 各 工 作 站 上 , 而 将 数 据 编 辑 软 件 ( 该 数 据 编 辑 系 统 只 有 具 有 数 据 编 辑 权 限 的 用 户 方 可 进 入 ) 安 装 于 数 据 源 点 处 的 工 作 站 上 。 用 户 的 权 限 由 网 络 操 作 系 统 和 系 统 管 理 员 控 制 。
4 、 充 分 利 用 Rushmore 技 术 提 高 网 络 环 境 下 数 据 库 操 作 速 度 Rushmore Technology 是 高 效 率 存 取 数 据 的 索 引 式 数 据 存 取 技 术 。 在 编 制 数 据 库 检 索 程 序 时 , 应 用 该 技 术 可 高 效 地 访 问 许 多 记 录 的 组 合 , 使 复 杂 的 数 据 库 操 作 速 度 提 高 成 百 上 千 倍 。 能 使 用 Rushmore 的 命 令 如 下 :
------------------------------------------------------ AVERAGE COPY TO ARRAY
EXPORT LOCATE SORT BROWSE COUNT INDEX RECALL SUM CALCULATE
DELETE JOIN REPLACE TOTAL CHANGE DISPLAY LABEL REPORT COPY TO
EDIT LIST SCAN ------------------------------------------------------ 但 编 程 人 员 必 须 牢 记 使 用 该 技 术 的 条 件 :
( 1 ) 、 使 用 上 表 的 命 令 必 须 包 含 有 一 个 FOR 参 数 , 且 FOR 参 数 中 的 条 件 运 算 式 必 须 是 一 个 最 优 化 运 算 式 。 而 且 , 要 给 可 加 搜 索 范 围 的 命 令 AVERAGE 、 SUM 、 LOACTE 、 SORT 等 加 上 ALL 或 NEXT 等 。 另 外 , 命 令 中 不 能 有 WHEN 参 数 。
( 2) 、 只 能 处 理 单 一 数 据 库 , 要 想 使 用 Rushmore 技 术 同 时 处 理 多 个 数 据 库 , 必 须 使 用 SQL 的 select 命 令 , 因 为 该 命 令 将 Rushmore 技 术 作 为 优 化 查 询 的 基 础 技 术 , 当 SQL 发 觉 需 要 索 引 时 , 即 自 动 创 建 临 时 索引 文 件 。
( 3 ) 、 在 上 表 的 命 令 中 若 指 定 了 NOOPTIMIZE 参 数 将 不 使
用 Rushmore 技 术 。
( 4 ) 、 在 FOXPRO 标 准 版 中 , 当 数 据 库 记 录 总 数 过 50 万 个 时 , Rushmore 无 效 。
5 、 数 据 库 的 数 据 冗 余 为 了 提 高 应 用 程 序 执 行 的 效 率 , 在 存 储 空 间 允 许 的 条 件 下 , 经 慎 重 考 虑 后 ,可 以 有 选 择 地 保 留 一 些 数 据 冗 余 , 也 可 在 数 据 库 中 保 留 那 些 使 用频 率 特 别 高 、 计 算 费 时 的 结 果 。
6 、 其 它
( 1 ) 、 为 尽 量 避 免 编 程的 重 复 工 作 , 减 少 硬 盘 空 间 的 占 用 量 , 在 系 统 设 计 过 程 中 要 进 行 综 合 分 析 , 提 取 相 似 点 , 编 制 通 用 的 程 序 , 便 于 程 序 重 用 。
( 2 ) 、 对 界 面 的 要 求 为 了 提 高 整 个 网 络 环 境 下 系 统 的 人 机 交 互 性 和 可 操 作 性 , 用 户 界 面 应 具 有 可 靠 性 、 简 单 性 和 立 即 反 馈 特 性 。 . 可 靠 性 : 指 界 面 要 具 有 一 定 的 容 错 能 力 , 能 及 时 正 确 地 给 出 运 行 状 态 指 示 和 出 错 信 息 , 并 引 导 用 户 改 正 错 误 ; . 简 单 性 : 尽 量 减 少 用 户 负 担 , 即 操 作 方 式 简 单 , 容 易 记 忆 , 输 入 / 输 出 容 易 理 解 ; 立 即 反 馈 : 对 用 户 的 应 用 请 求 都 应 在 用 户 心 理 许 可 的 时 间 范 围 内 给 出 响 应 , 即 使 不 能 得 到 结 果 , 也 应 给 出 某 种 信 息 以 缓 和 用 户 等 待 心 理 。 笔 者 采 用 以 上 方 法 , 已 成 功 完 成 了 多 个 网 络 环 境 下 综 合 信 息 管 理 系 统 的 开 发 , 收 到 了 很 好 的 效 果 。
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式