第 二 十 章 修 改 数 据
除 了 简 单 显 示 数 据 库 中 的 数 据 之 外 你 还 可 以 创 建 Web 页 面 允 许 用 户 修改 数 据 更 新 已 有 记 录 添 加 记 录 和 删 除 记 录 使 用 记 录 集 控 件 可 在 你 的应 用 中 建 立 数 据 修 改 功 能 每 个 修 改 功 能 都 创 建 一 个 记 录 集 一 种 虚 拟 表 格用 户 可 以 在 这 种 表 格 中 进 行 导 航 和 更 新 修 改 功 能 产 生 一 个 记 录 集 然 后 把 这个 集 合 传 递 给 基 础 数 据 库
另 外 你 可 以 使 用 记 录 集 显 示 你 页 面 上 的 记 录 然 后 调 用 已 存 过 程 完 成更 新 插 入 或 删 除 动 作 完 成 更 新 的 方 法 同 你 使 用 记 录 集 或 使 用 已 存 过 程 所 使用 的 方 法 是 一 样 的 关 于 把 记 录 集 控 件 绑 定 在 已 存 过 程 的 细 节 参 见 第 二十 一 章 直 接 访 问 数 据 库 中 的 使 用 数 据 环 境 执 行 数 据 库 命 令 一 节
不 管 使 用 哪 种 方 法 你 都 必 须 首 先 保 证 可 以 全 面 更 新 数 据 库 要 考 虑 的 因素 包 括
-
**许
可** 许 多 数 据 库 都 要 求 更 新 的 显 式 许 可 即 便 你 是 开 发 者 也 要 有 许 可才 能 进 行 更 新 你 必 须 保 证 你 的 Web 应 用 的 用 户 也 要 得 到 许 可
-
**足
够 的 数 据** 一 般 说 来 记 录 集 必 须 包 含 足 够 的 数 据 库 信 息 寻 找 相 应的 记 录 进 行 修 改 这 些 信 息 通 常 是 主 关 键 字 或 独 有 的 检 索 值 此 外 只是 作 为 记 录 集 组 成 部 分 的 字 段 才 能 更 新 例 如 一 个 记 录 集 可 能 包 括 雇员 的 ID 号 名 字 姓 尽 管 雇 员 表 格 还 有 更 多 字 段 在 这 种 情 况 下 你能 够 修 改 的 只 有 这 三 个 字 段 或 者 在 添 加 一 个 新 记 录 的 时 候 只 提 供 这 三
个 字 段
- **更
新 数 据 源** 如 果 你 借 助 于 记 录 集 进 行 更 新 必 须 有 Keyset 或 Dynamic 光 标 类 型 和 一 个 只 读 的 锁 定 类 型 此 外 记 录 集 必 须 以 你 可 以 更 新 的 数据 库 对 象 为 基 础 例 如 如 果 记 录 集 以 包 含 主 关 键 字 和 独 有 索 引 的 视 图为 基 础 它 就 不 能 更 新 而 不 管 你 选 择 的 光 标 类 型 如 何 准 确 内 容 取 决于 你 如 何 产 生 一 个 结 果 集 合 和 你 使 用 的 数 据 库 特 性
注 意 : 如 果 你 使 用 已 存 过 程 更 新 数 据 库 你 记 录 集 的 光 标 类 型 就 不 重 要 了因 为 更 新 不 能 在 记 录 集 中 传 递
20 . 1 从 当 前 记 录 中 获 取 数 值
按 照 默 认 设 置 在 页 面 运 行 的 时 候 记 录 集 脚 本 对 象 打 开 表 格 或 执 行 在 其数 据 绑 定 特 性 中 规 定 的 查 询 然 后 创 建 一 个 记 录 集 在 该 记 录 集 的 第 一 个 记 录上 放 上 一 个 指 针 (pointer) 这 个 记 录 就 变 成 当 前 记 录
要 显 示 数 据 你 需 要 从 当 前 记 录 中 获 取 数 值 如 果 你 正 以 设 计 期 间 控 件 进行 工 作 而 且 为 它 们 建 立 了 数 据 绑 定 那 么 这 些 控 件 就 自 动 进 行 更 新 反 映 数据 库 数 值
然 而 如 果 你 正 用 非 数 据 绑 定 控 件 进 行 工 作 你 必 须 把 当 前 记 录 中 的 数 值复 制 到 控 件 中 当 前 记 录 的 数 值 可 以 在 记 录 集 的 字 段 集 合 中 得 到
从 当 前 记 录 获 得 数 值
- 为
字 段 集 合 调 用 getValue 方 法 并 指 明 哪 个 字 段 是 你 希 望 的 字 段 例 如
下 列 语 句 从 称 为 rsEmployee List 的 记 录 集 对 象 字 段 集 合 中 提 取 Nam e
字 段 的 数 值
name = rsE mployeeList.fields.g etValue( “ Name ” )
提 示 : 从 当 前 记 录 中 获 取 数 值 的 较 好 时 机 是 在 对 应 于 记 录 集 onrowenter 事 件的 处 理 程 序 中
在 得 到 一 个 数 值 之 后 你 可 以 在 一 个 控 件 中 例 如 在 一 个 文 本 框 中 或 在 标签 控 件 中 显 示 它 例 如 下 列 脚 本 说 明 你 如 何 在 称 作 txtName txtAddress 等的 一 组 文 本 框 脚 本 对 象 中 显 示 当 前 记 录 的 数 值
注 意 : 如 果 这 个 控 件 和 记 录 集 使 用 同 一 种 目 标 脚 本 编 程 平 台 , 你 只 能 把 记 录 集的 信 息 复 制 到 一 个 控 件 中 更 多 细 节 参 见 第 二 十 三 章 脚 本 编 程 概念 中 的 脚 本 编 程 对 象 模 型 和 第 二 十 四 章 用 设 计 期 间 控 件 和 脚本 对 象 编 写 脚 本 中 的 用 设 计 期 间 控 件 创 建 窗 体 两 节
如 果 你 在 可 编 辑 控 件 中 显 示 数 据 例 如 在 文 本 框 中 显 示 数 据 用 户 就 可 以改 变 这 些 数 据 要 保 存 他 们 的 变 更 并 把 变 更 写 到 数 据 库 中 参 见 下 一 节 更 新记 录
20 .2 更 新 记 录
记 录 集 (Recordset ) 控 件 包 括 一 些 特 性 使 你 很 容 易 允 许 用 户 在 记 录 集中 更 新 当 前 记 录 例 如 如 果 你 在 页 面 上 使 用 一 个 RecordsetN avbar 控 件 就可 以 设 置 一 个 选 项 在 用 户 导 航 到 其 它 记 录 上 时 以 用 户 的 变 更 自 动 更 新 当 前 记录
不 是 所 有 记 录 集 都 允 许 变 更 ( 向 数 据 库 中 写 入 ) 记 录 集 对 象 光 标 类 型 必须 设 置 为 Keyset 或 Dynamic 你 还 必 须 拥 有 更 新 数 据 库 的 许 可 最 后 查 询 可以 产 生 记 录 集 但 是 不 包 含 允 许 更 新 的 足 够 信 息 有 关 细 节 参 见 本 章 开 始 部分
开 启 自 动 导 航 更 新
- 把 RecordsetN avbar 控 件 的 updateOnMo ve 属 性 设 置 为 True 真
注 释 : 把 这 个 选 项 设 置 为 True 真 便 使 得 记 录 集 在 用 户 每 次 导 航 时得 以 更 新 即 便 不 作 出 变 更 也 是 一 样 如 果 你 预 料 到 用 户 很 少 进行 变 更 你 可 能 希 望 使 用 系 统 开 销 较 少 的 一 种 策 略
如 果 你 正 用 数 据 绑 定 设 计 期 间 控 件 进 行 工 作 这 些 控 件 便 在 作 出 更 新 以 前把 它 们 的 数 值 复 制 到 当 前 记 录 中 但 是 如 果 你 工 作 时 使 用 的 控 件 不 是 数 据 绑定 设 计 期 间 控 件 那 么 你 必 须 在 作 出 更 新 以 前 手 动 更 新 当 前 记 录
在 当 前 记 录 中 设 置 数 值
- 为
字 段 集 合 设 置 setValue 方 法 指 明 那 个 字 段 是 你 希 望 的 字 段 规 定 要
更 新 的 字 段 和 数 值
提 示 : 从 当 前 记 录 获 取 数 值 的 较 好 时 机 是 在 记 录 集 onbeforeup date 事 件 的 处理 程 序 中
例 如 下 边 语 句 把 当 前 记 录 的 Name 字 段 设 置 为 称 为 Name 文 本 框 的 数 值
rsEmployee List.fields.setValue ( “ Nam e ” ,txtName.v laue)
注 释 : 如 果 控 件 和 记 录 集 使 用 同 一 个 目 标 脚 本 编 程 平 台 的 话 , 你 只 能 从 一 个 控件 向 记 录 集 中 复 制 更 多 细 节 参 见 第 二 十 三 章 脚 本 编 程 概 念 中的 脚 本 编 程 对 象 模 型 和 第 二 十 四 章 用 设 计 期 间 控 件 和 脚 本 对 象编 写 脚 本 中 的 用 设 计 期 间 控 件 创 建 格 式 两 节
你 只 能 在 脚 本 中 更 新 记 录 基 本 过 程 是 调 用 把 当 前 记 录 写 入 数 据 库 的 方 法
更 新 脚 本 中 的 记 录
1 . 要 保 证 在 你 的 页 面 上 有 一 个 记 录 集 Recordset 控 件 有 关 细 节 参 见 第 十 九 章 查 看 数 据 中 的 获 取 记 录 注 意 记 录 集 控 件 的 名字
-
如 果 你 在 页 面 上 拥 有 一 些 控 件 而 这 些 控 件 不 是 数 据 绑 定 设 计 期 间 控 件就 要 按 照 前 边 描 述 的 过 程 把 它 们 的 数 值 复 制 到 当 前 记 录 中
-
在 当
前 记 录 中 完 成 你 所 需 要 的 所 有 数 值 设 置 之 后 调 用 updateReco rd 方
法
下 例 给 出 一 个 Save 单 击 事 件 的 处 理 程 序 这 个 处 理 程 序 把 当 前 记 录 保 存 到
数 据 库 中
Sub btnS ave_ oncli ck
rsEmp loye eList .upda teRe cord End sub
下 例 给 出 同 一 个 过 程 但 是 把 数 值 从 非 数 据 绑 定 控 件 复 制 到 当 前 记 录 上然 后 再 保 存 这 些 数 值
为 了 帮 助 你 在 更 新 记 录 集 的 时 候 捕 获 差 错 你 可 以 为 记 录 集 对 象 的onbeforeup date 和 onafterupd ate 事 件 编 写 处 理 程 序 典 型 情 况 是 你 为onbeforeup date 事 件 编 写 一 个 处 理 程 序 以 保 证 在 当 前 记 录 中 的 数 据 是 正 确 的 你 可 以 使 用 onafterupd ate 事 件 来 确 定 更 新 是 否 成 功
关 于 为 设 计 期 间 控 件 编 写 事 件 处 理 程 序 的 内 容 参 见 第 二 十 四 章 用 设 计期 间 控 件 和 脚 本 对 象 编 写 脚 本 中 的 为 脚 本 对 象 编 写 脚 本 一 节
20 .3 添 加 记 录
当 你 使 用 脚 本 中 的 记 录 集 对 象 进 行 工 作 时 你 可 以 有 两 种 方 式 向 数 据 库 中
添 加 记 录 第 一 种 方 式 分 两 步 操 作 首 先 你 启 动 一 个 新 的 空 白 记 录 用 户 可以 填 写 这 个 记 录 在 记 录 完 成 的 时 候 用 户 可 以 单 击 Save 按 钮 或 类 似 按 钮 把 当 前 记 录 写 入 到 数 据 库 中 就 像 一 个 已 经 存 在 的 记 录 被 更 新 一 样 当 你 用 一种 窗 体 进 行 工 作 而 用 户 可 以 使 用 这 种 窗 体 编 辑 已 经 存 在 的 记 录 或 添 加 新 记 录在 这 种 情 况 下 上 述 策 略 是 很 有 用 的
另 外 一 种 情 况 你 可 以 创 建 一 个 新 记 录 并 把 它 移 入 单 个 操 作 之 中 如 果你 的 目 标 脚 本 编 程 平 台 是 服 务 器 立 即 添 加 这 种 模 式 会 更 有 效 因 为 这 样 可 以避 免 服 务 器 启 动 新 记 录 的 往 返 过 程 在 你 不 使 用 某 种 窗 体 而 是 在 脚 本 中 创 建一 些 新 记 录 时 这 种 策 略 特 别 有 用 尤 其 当 你 把 几 个 记 录 一 次 添 加 到 数 据 库 中时
你 不 可 能 总 是 可 以 创 建 新 记 录 你 需 要 对 你 的 记 录 集 有 正 确 设 置 还 要 对数 据 库 有 适 当 的 许 可 以 及 唯 一 标 识 记 录 的 足 够 信 息 更 详 细 信 息 参 见 本 章 开始 部 分
先 预 置 后 更 新
在 用 某 种 窗 体 进 行 工 作 的 时 候 你 经 常 使 用 预 置 和 更 新 的 策 略 这 种 窗 体通 常 有 一 个 New 按 钮 和 一 个 Save 按 钮 使 用 预 置 和 更 新 策 略 你 可 以 使 用 同 一个 Save 按 钮 更 新 已 经 存 在 并 已 经 编 辑 过 的 记 录 还 可 用 于 插 入 新 记 录
在 记 录 集 中 预 置 一 个 新 记 录 你 要 使 用 记 录 集 对 象 的 addRecord 方 法如 果 你 用 数 据 绑 定 设 计 期 间 控 件 进 行 工 作 这 个 记 录 集 便 在 你 预 置 一 个 新 记 录的 时 候 自 动 清 除 控 件 当 你 保 存 这 个 记 录 时 用 户 键 入 的 数 值 便 自 动 复 制 到 当前 记 录 中 然 后 再 把 记 录 写 入 数 据 库
如 果 你 工 作 用 的 控 件 不 是 数 据 绑 定 设 计 期 间 控 件 则 你 必 须 完 成 一 些 这 方面 的 工 作 在 预 置 一 个 记 录 之 后 你 必 须 手 动 清 除 控 件 这 样 用 户 便 能 录 入 新数 据 然 后 在 你 的 用 户 单 击 Save 按 钮 或 类 似 按 钮 的 时 候 你 必 须 保 证 把 数 据 从控 件 复 制 到 当 前 记 录 中 然 后 才 把 这 些 记 录 写 入 数 据 库
预 置 并 添 加 记 录
1 . 保 证 在 你 的 页 面 上 有 一 个 记 录 集 Recordset 控 件 详 见 第 十 九 章查 看 数 据 中 的 获 取 记 录 注 意 记 录 集 控 件 的 名 字
2. 在 脚 本 中 调 用 记 录 集 脚 本 对 象 的 addRecord 方 法 在 这 个 记 录 集 中 准备 一 个 新 的 空 白 记 录 例 如 用 于 New 按 钮 的 下 列 事 件 处 理 程 序 调 用addRecord 方 法
Sub btnNew _onclick
rsEmplo yeeList.addRecord End sub
如 果 你 的 页 面 包 含 非 数 据 绑 定 控 件 便 在 预 置 新 页 面 之 后 清 除 这 些 控 件如 下 例 所 示 :
注 意 : 如 果 控 件 和 记 录 集 都 使 用 同 样 的 目 标 脚 本 编 程 平 台 , 在 同 一 个 时 机 你只 能 使 用 控 件 和 记 录 集 进 行 工 作 详 见 第 二 十 三 章 脚 本 编 程 概 念 中 的 脚 本 编 程 对 象 模 型 和 第 二 十 四 章 用 设 计 期 间 控 件 和 脚 本 对象 编 写 脚 本 中 的 用 设 计 期 间 控 件 创 建 窗 体 两 节
在 用 户 单 击 New 按 钮 时 用 户 便 把 信 息 键 入 到 新 记 录 中 页 面 上 的 |
记 |
录 | |
---|---|---|---|
集 |
控 件 设 置 一 个 旗 标 flag 表 示 这 是 一 个 新 记 录 在 用 户 单 击 Save |
按 |
钮 |
时 |
记 录 集 控 件 便 自 动 创 建 这 个 新 记 录 以 用 户 的 数 据 更 新 这 个 记 录 |
再 |
把 |
记 录 写 入 数 据 库 |
新 记 录 填 写 之 后 同 已 有 记 录 一 样 的 方 式 |
以 记 录 集 对 象 的 |
updateReco rd |
---|---|---|
方 法 进 行 保 存 详 见 本 章 前 边 的 更 新 记 录 |
— 节 |
|
即 |
刻 |
添 加 |
如 果 你 正 在 脚 本 中 创 建 记 录 你 会 经 常 立 即 把 记 录 添 加 到 数 据 库 中 把 记录 立 即 添 加 到 数 据 库 中 同 先 预 置 一 个 记 录 然 后 保 存 是 类 似 的 然 而 因 为 添加 和 更 新 功 能 是 在 一 个 步 骤 中 完 成 的 因 而 对 服 务 器 只 要 求 往 返 一 次
在 你 创 建 一 个 即 刻 记 录 时 你 必 须 把 各 字 段 的 信 息 收 集 在 一 起 然 后 在 你添 加 新 记 录 时 把 这 些 信 息 作 为 参 数 传 递 给 记 录
添 加 即 刻 记 录
1 . 把 要 写 入 数 据 库 的 信 息 收 集 在 一 起 你 可 以 使 用 页 面 上 的 控 件 做 这 件 事情 数 值 要 计 算 出 来 或 通 过 其 它 方 式 得 到
- 创 建 两 个 数 列 一 个 数 列 包 含 字 段 的 名 字 另 一 个 数 列 包 含 数 值 例 如
下 列 脚 本 创 |
建 一 个 字 段 数 列 |
跟 |
踪 |
事 |
务 |
处 |
理 |
transID |
transData |
和 |
---|---|---|---|---|---|---|---|---|---|---|
transTime |
和 每 个 字 段 的 数 值 |
- 调 用 记 录 集 对 象 的 addImmedia te 方 法 添 加 记 录 并 把 记 录
传 递 给 你刚 刚 创 建 的 两 个 数 列 如 下 例 所 示
rsTransact ionLog.addImmediate( feldsArray. ValuesA rr ay )
关 于 为 设 计 期 间 控 件 编 写 事 件 处 理 程 序 参 见 第 二 十 四 章 用 设 计 期 间 控件 和 脚 本 对 象 编 写 脚 本 中 的 为 脚 本 对 象 编 写 脚 本 一 节
20 .4 删 除 记 录
要 从 数 据 库 中 删 除 一 个 记 录 你 可 以 在 页 面 上 添 加 一 个 控 件 例 如 Delete
删 除 按 钮 这 个 按 钮 调 用 记 录 集 的 deletereco rd 方 法 删 除 当 前 的 记 录
你 不 是 总 可 以 删 除 记 录 你 需 要 对 你 记 录 集 正 确 设 置 数 据 库 中 相 应 权 限和 唯 一 标 识 记 录 的 足 够 信 息 有 关 细 节 参 见 本 章 开 头 部 分
在 脚 本 中 删 除 记 录
1 . 保 证 在 你 的 页 面 上 有 一 个 记 录 集 控 件 详 见 第 十 九 章 查 看 数 据中 的 获 取 记 录 一 节
- 在 脚 本 中 调 用 记 录 集 脚 本 对 象 的 deletereco rd 方 法 就 像 下 例 中 称 为
btnDelete 按 钮 的 处 理 程 序 一 样
Sub btnDel ete_onclick
rsEmplo yeeList.deleteRecord End sub
按 照 默 认 设 置 上 边 说 明 的 脚 本 使 得 页 面 显 示 的 记 录 是 刚 刚 被 删 除 的 记 录后 边 紧 跟 着 的 记 录 如 果 你 愿 意 让 页 面 显 示 一 个 不 同 记 录 则 可 以 在 返 回 语 句的 前 边 插 入 一 个 导 航 方 法 下 边 的 例 子 说 明 如 何 移 到 前 边 的 记 录
关 于 为 设 计 期 间 控 件 编 写 事 件 处 理 程 序 的 更 多 内 容 参 见 第 二 十 四 章 用设 计 期 间 控 件 和 脚 本 对 象 编 写 脚 本 中 的 为 脚 本 对 象 编 写 脚 本 一 节