📄 visual foxpro 5.txt
字号:
fld2
fld3
fld4
1
a11
a12
a11
b12
2
a21
a22
a21
b22
3
a31
a32
---- 从 表 上 可 以 看 出, 左 连 接 产 生 的 结 果 记 录 集 中 以 连 接 关 系 的 左 边 数 据 表 为 基 准, 将 左 边 记 录 全 部 输 出, 同 时 对 满 足 左 连 接 条 件 的 右 边 数 据 表 中 相 关 记 录 的 内 容 也 输 出。 而 对 右 边 表 中 无 满 足 连 接 条 件 的 左 边 表 记 录, 其 输 出 结 果 中 有 关 右 边 记 录 信 息 全 置 空。
---- 使 用 右 连 接(RIGHT OUTER JOIN), 与 左 连 接 方 式 相 反, 它 以 右 边 表 为 主, 用 于 对 连 接 条 件 右 边 字 段 所 在 的 表 进 行 全 部 记 录 查 询, 并 连 接 条 件 左 边 字 段 所 在 表 满 足 连 接 条 件 的 记 录 进 行 查 询。 当 右 边 数 据 表 中 有 记 录 而 左 边 数 据 表 中 无 相 应 连 接 条 件 的 记 录 时, 则 输 出 的 左 边 数 据 表 字 段 内 容 呈 现 空 值(NULL)。 譬 如 如 下 语 句:
SELECT * FROM table1 RIGHT OUTER JOIN table2 ;
ON table1.fld1=table2.fld3
---- 将 得 到 如 下 一 个 记 录 集:
---- 右 连 接 时 产 生 的 结 果 记 录 集
字 段 名
记 录 号
fld1
fld2
fld3
fld4
1
a11
a12
a11
b12
2
a21
a22
a21
b22
3
b31
b32
---- 使 用 左 连 接 或 右 连 接 方 式, 可 以 方 便 地 查 找 到 两 个 关 联 表 中, 其 中 一 个 表 有 记 录 而 另 一 个 表 中 无 相 关 记 录 的 情 况。 一 般 用 于 父 表 和 子 表 中 记 录 相 关 的 合 法 性 检 索。 譬 如, 下 面 语 句:
SELECT * FROM table1 RIGHT OUTER JOIN table2 ;
ON table1.fld1=table2.fld3 ;
WHERE EMPTY(fld1)
---- 可 以 方 便 地 将 表2 有 记 录 而 表1 中 不 存 在 相 应 的 关 联 记 录 的 情 况 检 索 出 来, 结 果 只 有 一 条 记 录, 就 是 上 表 中 的 第3 条 记 录。 在 以 前 版 本 的SELECT - SQL 语 句 中, 要 完 成 这 种 查 询 任 务, 相 对 就 要 复 杂 得 多 了, 一 般 而 言 它 必 须 借 助 于 子 查 询 的 方 式 才 能 达 到 目 的。
---- 使 用 满 连 接(FULL OUTER JOIN), 它 实 质 上 是 左 连 接 和 右 连 接 方 式 的 组 合。 查 询 结 果 记 录 集 中 集 合 了 连 接 两 边 的 表 记 录, 包 括 符 合 条 件 和 不 符 合 条 件 的 记 录。 但 是, 与 无 连 接 方 式 不 同, 它 并 不 是 交 叉 连 接。 满 连 接 的 结 果 集 分 三 部 分: 一 部 分 记 录 是 两 边 都 满 足 连 接 条 件 的 记 录, 其 中 涉 及 的 左 边 表 内 容 和 右 边 表 记 录 内 容 都 输 出; 第 二 部 分 是 不 满 足 连 接 条 件 的 左 边 表 记 录, 此 时 其 涉 及 的 右 边 表 记 录 内 容 置 空; 第 三 部 分 是 不 满 足 连 接 条 件 的 右 边 表 记 录, 此 时 其 涉 及 的 左 边 表 记 录 内 容 置 空。 例 如, 如 下 满 连 接 语 句:
SELECT * FROM table1 FULL OUTER JOIN table2 ;
ON table1.fld1=table2.fld3
---- 将 得 到 如 下 一 个 记 录 集:
---- 满 连 接 时 产 生 的 结 果 记 录 集
字 段 名
记 录 号
fld1
fld2
fld3
fld4
1
a11
a12
a11
b12
2
a21
a22
a21
b22
3
a31
a32
4
b31
b32
---- 使 用 满 连 接 方 式, 可 以 方 便 地 查 找 到 两 个 关 联 表( 父 子 表) 中, 一 次 性 查 找 到 有 父 无 子 和 有 子 无 父 的 记 录 情 况。
---- 从 上 面 可 以 总 结 出, 对 不 同 的 连 接 方 式, 结 果 集 中 的 记 录 数 不 同: 对 无 连 接 方 式, 其 结 果 是 两 边 表 记 录 的 迪 卡 尔 积; 对 内 连 接 方 式, 其 结 果 是 两 边 表 记 录 的 交 集; 对 左 连 接 方 式, 其 结 果 是 左 边 表 记 录 数; 对 右 连 接 方 式, 其 结 果 是 右 边 表 记 录 数; 对 满 连 接 方 式, 其 结 果 是 两 边 表 记 录 的 并 集。
---- 8、 视 图 中 的 动 态 条 件 设 置
---- FoxPro 产 品 已 经 在 我 们 国 家 流 行 了 这 么 多 年, 但 似 乎 可 以 肯 定 的 一 点 是, 绝 大 部 分 FoxPro 用 户, 包 括 应 用 开 发 者, 对 有 关“ 视 图” 的 概 念 和 使 用 都 不 太 清 楚。
---- Visual FoxPro 提 供 的 视 图, 实 质 是 一 个 虚 拟 的 数 据 表, 并 不 对 应 于 一 个 具 体 的 磁 盘 文 件。 视 图, 通 过 一 定 的 连 接 关 系 和 记 录 筛 选 条 件, 将 来 自 于Visual FoxPro 数 据 表 或 后 端 数 据 库 的 数 据 集 合 到 一 起, 通 过 这 个 数 据 集, 可 以 方 便 地 进 行 查 询、 更 新 或 多 数 据 表 间 的 数 据 连 接 等 操 作, 它 同 时 能 将 基 于 视 图 更 新 的 数 据 对 应 到 相 应 的 数 据 表 中 的 相 应 记 录 中。 视 图 技 术, 可 以 大 大 简 化 数 据 表 应 用 的 设 计 工 作。
---- 视 图 存 在 于 数 据 库 中, 可 以 通 过 视 图 设 计 器 可 视 创 建, 或 者 通 过 CREATE VIEW 命 令 程 序 创 建。 视 图 中 的 记 录 数 据 集 并 不 实 际 存 在, 而 是 在 每 次 打 开 该 视 图 时, 自 动 临 时 从 相 关 数 据 表 中 下 载 记 录 到 视 图 中。
---- 一 般 地, 在 一 个 应 用 模 块 中, 我 们 是 基 于 一 组 特 定 数 据 而 不 是 全 部 数 据 进 行 处 理。 因 此, 为 提 高 处 理 效 率, 一 般 视 图 都 设 置 一 定 的 筛 选 条 件, 以 保 证 只 将 满 足 条 件 的 记 录 下 载 到 视 图 中, 而 不 是 下 载 全 部 记 录。
---- 现 在 的 问 题 是, 如 果 在 一 个 应 用 表 单 中, 我 们 需 要 重 复 多 次 用 不 同 的 筛 选 条 件 重 新 形 成 视 图 以 得 到 不 同 的 记 录 集, 如 何 来 设 置 这 个 动 态 的 筛 选 条 件 呢 ?
---- 譬 如, 针 对 上 一 节 的 两 个 数 据 表:table1、table2, 我 们 通 过 视 图 设 计 器, 采 用 内 连 接 方 式, 连 接 条 件 是:table1.fld1=table2.fld3。 第 一 次 用 fld1="a11" 的 筛 选 条 件 形 成 关 于 fld1 字 段 值 是“a11" 的 视 图; 完 成 一 定 的 处 理 后, 又 需 要 第 二 次 用 fld1="a21" 的 筛 选 条 件 形 成 关 于 fld1 字 段 值 是“a21" 的 视 图; 完 成 一 定 的 处 理 后, 第 三 次 又 用 fld1 等 于 其 它 字 段 值 的 筛 选 条 件 形 成 新 的 视 图, 等 等。 条 件 是 根 据 应 用 执 行 时 用 户 输 入 动 态 变 化 的, 在 视 图 中 如 何 来 设 置 这 种 动 态 条 件 呢 ?
---- 其 处 理 实 质 很 简 单: 使 用 参 数 的 方 式 设 置 筛 选 条 件, 向 视 图 传 递 参 数, 可 以 通 过 在 一 个 变 量 名 前 置 一 个 问 号( ?) 即 可, 注 意 问 号 与 变 量 名 中 间 不 能 存 在 空 格 或 其 它 空 白 符 ! 选 择 视 图 设 计 器 的 筛 选(Filter) 页, 在 字 段 名(FieldName) 框 选 中 fld1 字 段, 在 实 例(Sample) 框 输 入:?fld1value。
---- 对 上 面 设 计 的 动 态 视 图, 每 次 打 开 数 据 库 时, 在 形 成 该 视 图 数 据 集 之 前 将 出 现 一 个 视 图 参 数 对 话 框, 如 图8 -1 所 示, 请 求 输 入 一 个 字 段 值。
---- 然 后 在 程 序 中, 可 以 每 次 重 新 给 fld1value 变 量 赋 值, 再 紧 跟 着 执 行 一 条:=REQUERY() 语 句, 即 可 完 成 另 一 个 条 件 的 视 图 的 形 成。
---- 但 是, 这 种 一 打 开 数 据 库 就 出 现 一 个 对 话 框 请 求 输 入 变 量 值 的 方 式 很 不 友 好。 改 进 的 方 法 是, 设 计 视 图, 使 在 打 开 数 据 库 时 首 先 不 下 载 记 录, 这 样 就 不 会 立 即 出 现 极 不 友 好 的 视 图 参 数 对 话 框 了; 然 后 在 表 单 或 程 序 中, 通 过 程 序 获 得 fld1value 变 量 的 一 次 输 入 值, 再 执 行 =REQUERY() 语 句 即 可 获 得 需 要 的 视 图 数 据 集。
---- 使 视 图 在 打 开 数 据 库 时 不 立 即 下 载 记 录, 具 体 可 如 下 实 现:
---- * 如 果 是 将 视 图 放 置 到 一 个 表 单 的 数 据 环 境 中, 该 视 图 将 在 数 据 环 境 中 形 成 一 个 游 标 对 象( 如:Cursor1), 设 置 该 游 标 对 象 cursor1 的 NodataOnload 属 性 为 真 即 可。
---- * 如 果 是 在 程 序 中 打 开 数 据 库 和 视 图, 其 打 开 视 图 的 语 句 应 带 NODATA 子 句, 如:
OPEN DATABASE < 数 据 库 名 >
USE < 视 图 名 > NODATA
---- 这 样 视 图 打 开 后, 并 不 会 立 即 下 载 记 录 数 据, 只 有 到 执 行 =REQUERY() 语 句 时, 才 下 载 记 录。 从 而 可 以 达 到 我 们 定 制 动 态 视 图 的 目 的。
---- 如 果 是 在 表 单 的 数 据 环 境 中 使 用 视 图, 则 动 态 视 图 的 参 数 可 以 使 用 表 单 属 性。 比 如, 可 以 给 该 表 单 新 添 一 个 queryvalue 的 属 性, 则 在 视 图 设 计 器 的 筛 选 页 中 可 以 用 如 下 表 达 式 引 用 视 图 参 数:?thisform.queryvalue。
---- 9、 怎 样 设 计 一 个 可 更 新 数 据 源 表 的 本 地 视 图
---- 可 能 你 设 计 的 本 地 视 图, 希 望 在 表 单 应 用 中 能 更 新 相 应 数 据 来 源 的 记 录, 即 当 你 对 视 图 添 加、 修 改 或 删 除 了 记 录 时, 希 望 将 这 些 信 息 反 映 到 相 应 的 数 据 表 中 去, 这 种 可 以 更 新 数 据 源 的 本 地 视 图 的 设 计 相 对 而 言 需 要 考 虑 的 因 素 比 较 多。 必 须 仔 细 设 计 视 图 设 计 器 中 更 新 条 件 页 中 的 各 项 内 容。 具 体 说 来 需 要 考 虑 如 下 方 面:
---- 1、 设 置 关 键 字 段。 要 设 计 一 个 可 更 新 数 据 源 的 本 地 视 图, 必 须 给 本 地 视 图 指 定 一 个 关 键 字 段, 在 更 新 数 据 源 时, 该 关 键 字 段 将 作 为 比 较 本 地 视 图 记 录 与 数 据 源 中 记 录 的 依 据, 由 此 判 别 记 录 是 否 发 生 了 变 化。 可 以 指 定 多 个 字 段 组 合 为 关 键 字 段, 以 保 证 关 键 字 段 能 唯 一 确 定 记 录。 如 果 本 地 视 图 对 应 有 多 个 要 更 新 的 数 据 源 表, 则 必 须 针 对 每 一 个 数 据 源 设 置 至 少 一 个 关 键 字 段。
---- 一 般 地, 应 指 定 对 应 于 数 据 源 中 主 关 键 字 或 候 选 关 键 字 的 字 段 为 视 图 的 关 键 字 段。
---- 在 更 新 条 件 页 的 字 段 名 列 表 中 列 出 了 视 图 中 的 所 有 字 段 名, 点 按 列 表 中 要 指 定 为 关 键 字 段 的 字 段 左 边、 钥 匙 符 号 列 的 位 置, 该 位 置 出 现 一 个 按 钮, 点 按 该 按 钮 使 之 出 现 一 个 对 勾, 表 示 已 指 定 该 字 段 为 关 键 字 段。
---- 可 以 点 按 左 边 的 重 置 关 键 字 按 钮, 重 新 设 置 关 键 字 段。
---- 2、 指 定 可 更 新 字 段。 只 有 被 指 定 为 可 更 新 字 段 后, 该 字 段 才 可 更 新 数 据 源 中 对 应 的 字 段。 点 按 字 段 名 列 表 中 要 指 定 为 可 更 新 字 段 的 字 段 左 边、 铅 笔 符 号 列 的 位 置, 该 位 置 也 将 出 现 一 个 按 钮, 点 按 该 按 钮 使 之 出 现 一 个 对 勾, 表 示 已 指 定 该 字 段 为 可 更 新 字 段。
---- 没 有 指 定 为 可 更 新 字 段 的 字 段, 是 只 读 字 段, 尽 管 你 改 变 了 视 图 中 只 读 字 段 的 值, 它 们 也 不 能 对 数 据 源 进 行 更 新。
---- 可 以 点 按 左 边 的 全 部 更 新 按 钮, 将 所 有 非 关 键 字 段 设 置 为 可 更 新 字 段。
---- 3、 选 中 更 新 条 件 页 中 的“ 发 送 SQL 更 新” 复 选 框 项。 选 中 它 后, 才 可 将 被 更 新 的 记 录 字 段 采 用 Update SQL 语 法 对 数 据 源 中 的 表 进 行 更 新。
---- 4、 选 择 检 测 更 新 冲 突 的 方 式。 在 更 新 条 件 页 具 有 一 个“SQL WHERE 子 句 包 括” 框, 其 中 的 选 项 用 以 控 制 将 哪 些 字 段 添 加 到 WHERE 子 句 中, 在 将 视 图 修 改 传 送 到 数 据 源 表 时, 就 可 以 检 测 服 务 器 上 的 更 新 冲 突。 冲 突 是 由 视 图 中 的 旧 值( 而 不 是 指 修 改 后 的 值) 和 数 据 源 的 当 前 值 之 间 的 比 较 结 果 决 定 的(OLDVAL( ) 和 CURVAL( ) 之 间 比 较)。 如 果 两 个 值 相 等, 则 认 为 原 始 值 未 做 修 改, 不 存 在 冲 突; 如 果 它 们 不 相 等, 则 存 在 冲 突, 数 据 源 返 回 一 条 错 误 信 息。
---- 旧 值 和 当 前 值 之 间 的 冲 突 所 返 回 的 错 误 为“ 错 误 1585: 记 录 已 被 其 他 人 修 改”, 或 者 是“ 错 误 1494: 更 新 冲 突。 请 使 用 TABLEUPDATE() 进 行 强 制 更 新 或 使 用 TABLEREVERT() 回 滚”。
---- "SQL WHERE 子 句 包 括” 中 包 括 如 下 选 项:
---- 关 键 字 段: 如 果 在 数 据 源 表 中 有 一 个 关 键 字 字 段 被 改 变, 设 置 WHERE 子 句 来 检 测 冲 突。 而 对 于 由 另 一 用 户 对 数 据 源 表 中 原 始 记 录 的 其 他 字 段 所 做 修 改, 则 不 进 行 比 较。 它 是 最 保 守 的 更 新 方 式, 完 全 不 考 虑 在 本 地 视 图 中 输 出 的 字 段 中 哪 些 有 可 更 新 性, 而 将 本 地 视 图 中 的 所 有 记 录 用 关 键 字 段 进 行 比 较。
---- 关 键 字 和 可 更 新 字 段: 如 果 另 一 用 户 修 改 了 任 何 可 更 新 的 字 段, 设 置 WHERE 子 句 来 检 测 冲 突。
---- 关 键 字 和 已 修 改 字 段: 如 果 从 视 图 首 次 检 索( 默 认) 以 后, 关 键 字 字 段 或 数 据 源 表 记 录 的 已 修 改 字 段 中, 某 个 字 段 做 过 修 改, 设 置 WHERE 子 句 来 检 测 冲 突。
---- 关 键 字 段 和 时 间 戳: 它 用 于 远 程 视 图, 对 本 地 视 图 无 用。
---- 5、 选 择 更 新 数 据 源 的 方 式。 在 更 新 条 件 页 具 有 一 个“ 使 用 更 新” 框, 它 提 供 了 两 种 更 新 数 据 源 的 方 式 供 选 择, 以 指 定 字 段 如 何 在 后 端 服 务 器 上 更 新:
---- SQL DELETE 然 后 INSERT 方 式: 先 删 除 数 据 源 表 中 原 来 的 记 录, 然 后 再 插 入 一 条 新 的 在 视 图 中 被 修 改 了 的 记 录, 更 新 = 删 除 + 插 入。
---- SQL UPDATE: 用 视 图 字 段 中 的 变 化 来 置 换 修 改 数 据 源 表 的 字 段 值。
---- 只 有 在 仔 细 设 置 好 上 述 各 项 内 容 之 后, 该 本 地 视 图 才 能 用 来 更 新 数 据 源 表 数 据。
--------------------------------------------------------------------------------
中国计算机世界出版服务公司版权所有
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -