Delphi 3.0 对 访 问 数 据 库 提 供 了 强 有 力 的 支 持, 利 用Delphi 3.0 可 以 开 发 出 功 能 强 大 的 数 据 库 应 用 程 序。
---- Delphi 的 可 视 化 功 能 相 当 强 大, 制 作 一 个 简 单 的 仅 对 数 据 进 行 查 看 和 维 护 的 程 序 十 分 容 易, 可 以 不 写 任 何 代 码 就 能 实 现 !Delphi 3.0 中 访 问 数 据 库 的 方 式 有 三 种: 直 接 访 问, 如 访 问Paradox 和DBase 数 据 库; 通 过ODBC 访 问, 如 访 问Access、FoXPro 等 数 据 库; 通 过 内 嵌(Native) 方 式 访 问 数 据 库, 如 访 问SQL Server、Oracle、DB2 等。 在Delphi 中, 可 以 使 用Table 控 件 或/ 和Query 控 件 来 访 问 数 据 库, 二 者 的 设 置 和 用 法 都 差 不 多, 因 此 下 面 仅 以Table 控 件 为 例 说 明 这 三 种 方 式 的 特 点 和 用 法。
---- 1. 直 接 访 问
---- Delphi 可 以 直 接 访 问Paradox 和DBase 这 两 个 桌 面 型 的 数 据 库 系 统。 访 问 这 两 种 类 型 的 数 据 库 时 不 需 要 特 别 的 设 置, 只 需 要 把 文 件 路 径 赋 给Table 控 件 的 属 性DatabaseName 就 可 以 访 问 该 路 径 下 的 数 据 库 了。 当 然, 也 可 以 事 先 建 立 映 射 数 据 库 路 径 的 数 据 库 别 名, 然 后 把Table 控 件 的DatabaseName 属 性 设 置 为 相 应 的 数 据 库 别 名。
---- 2. 通 过ODBC 访 问
---- 访 问Paradox 和DBase 以 外 的 数 据 库, 通 常 是 通 过ODBC 来 实 现 的。Delphi 可 以 访 问 支 持ODBC 的 数 据 库 系 统, 如Access、SQL Server 和Oracle 等。 当 然, 通 过ODBC 访 问 数 据 库 时, 首 先 要 使 用Windows 的 控 制 面 板 或Delphi 的 数 据 库 引 擎(BDE) 建 立ODBC 数 据 源。
---- Delphi 提 供 了Database 控 件, 该 控 件 的 作 用 有: 在 应 用 程 序 的 控 制 下 和 数 据 库 系 统 建 立 连 接、 进 行 事 务 处 理 等。 在 数 据 库 应 用 程 序 中, 可 以 使 用Database 控 件, 也 可 以 不 使 用。 如 果 不 使 用Database 控 件, 可 以 直 接 把ODBC 数 据 源 的 名 称 赋 给Table 控 件 的 属 性DatabaseName 而 达 到 访 问 该 数 据 库 的 目 的。 这 种 方 式 的 弊 端 是 在 程 序 运 行 时 由Delphi 系 统 自 动 弹 出 登 录 到 数 据 库 的 英 文 界 面 的 窗 口, 既 不 美 观 又 不 便 于 控 制。 因 此, 笔 者 建 议 在 数 据 库 应 用 程 序 中 使 用Database 控 件 来 登 录 到 数 据 库 系 统。 把Table 控 件 与Database 控 件 关 联 的 方 法 是 把 其DatabaseName 属 性 值 指 定 为Database 控 件 的DatabaseName 属 性 值。 一 个Database 控 件 可 以 管 理 若 干 个Table 控 件。 和Database 控 件 建 立 关 联 以 后, 只 要 该Database 控 件 已 经 和 数 据 库 建 立 了 连 接,Table 控 件 就 可 以 直 接 访 问 数 据 库 而 无 须 再 次 登 录。
---- 3. 通 过 内 嵌 方 式 访 问
---- Delphi 中 可 以 不 通 过ODBC, 而 以 内 嵌 方 式 访 问SQL Server、Oracle、DB2 等 数 据 库 系 统。 这 需 要 使 用 数 据 库 别 名 来 指 定 数 据 库, 数 据 库 别 名 可 以 事 先 建 立, 也 可 以 在 程 序 运 行 时 动 态 创 建。 前 者 称 为 静 态 别 名, 后 者 称 为 动 态 别 名。 使 用 数 据 库 别 名 来 访 问 数 据 库 的 方 法 和 使 用ODBC 数 据 源 的 情 形 相 同, 这 里 不 再 累 述。 通 过 内 嵌 方 式 访 问 数 据 库 的 静 态 别 名 必 须 在BDE 中 建 立。 以 访 问SQL Server 数 据 库 为 例, 在 建 立 别 名 时 必 须 指 定 数 据 库 服 务 器 的 名 称(SERVER NAME)、 主 机 名(HOST NAME) 以 及 要 访 问 的 数 据 库 名 称(DATABASE NAME), 可 以 指 定 登 录 用 户 名(USER NAME) 和 口 令(PASSWord) 等。 通 过 动 态 创 建 的 别 名 来 访 问 数 据 库 必 须 使 用Database 控 件。
如 何 设 置Database 控 件 中 访 问 数 据 库 的 参 数 呢 ? 用 鼠 标 双 击Database 控 件, 出 现 参 数 设 置 窗 口, 在"Driver name" 一 栏 选 择 要 访 问 的 数 据 库 系 统, 如"MSSQL", 然 后 选 择 按 钮"Defaults", 就 会 把BDE 中 该 数 据 库 系 统 所 需 的 参 数 名 称 和 缺 省 值 加 入 到"Parameter overrides" 列 表 中。 根 据 实 际 情 况 更 改 参 数 中 的"SERVER NAME"、"DATABASE NAME" 等 项。 然 后 选 择 按 钮"OK" 就 可 以 了。 需 要 说 明 的 两 点 是, 以 内 嵌 方 式 访 问 数 据 库 需 要 在 安 装Delphil 3.0 时 指 定 安 装SQL Link;Query 控 件 的SQL 语 句 不 能 以 分 号 结 尾。
---- 结 论
---- 通 过 内 嵌 方 式 访 问 数 据 库 与 通 过ODBC 访 问 数 据 库 相 比, 前 者 的 速 度 要 快 一 些。 而 且, 内 嵌 方 式 可 以 在 程 序 中 动 态 地 设 置 连 接 数 据 库 所 需 的 参 数, 用 户 不 必 设 置ODBC 数 据 源, 这 就 降 低 了 对 用 户 技 术 水 平 的 要 求, 并 且 减 少 了 用 户 的 工 作 量。 从 系 统 配 置 的 难 易 和 复 杂 程 度 来 看, 使 用 内 嵌 方 式 开 发 出 的 数 据 库 应 用 系 统 更 便 于 普 通 用 户 使 用。 因 此, 笔 者 建 议 在 开 发 较 大 型 的 应 用 系 统 时, 最 好 通 过 内 嵌 方 式 来 访 问 数 据 库。