MFC--ODBC数据交换RFX

MFC中ODBC类库简介

---- MFC 中 针 对ODBC 数 据 库 编 程 提 供 了五 种 基 类。 这 些 类 封 装 了 有 关ODBC 的API 调 用, 使 用 户 能 够 利 用ODBC 完 成 不 同 类型 的 数 据 库 编 程 工 作, 如 访 问Foxpro、dBASE 或Sybase 等 不 同 类 型 数 据 库 文 件, 从而 避 开 各 种 类 型 数 据 库 文 件 的 复 杂 的 内 部 结 构。 这 五 种 基 类 是:

  • CDatabase 类 对 象 表 示 与 数 据 源 的 连 接。 用 户 正 是 基 于 此 连 接 实 现 对 数 据源 的 操 作。
  • CRecordset 类 对 象 表 示 了 从 数 据 源 中 选 出 的 一 组 记 录。 该 对 象 使 用 户 能 完成 在 记 录 间 的 滚 动、 更 新 记 录、 对 记 录 进 行 过 滤 排 序 等 操 作。
  • CRecordView 类 对 象 直 接 与 一CRecordset( 记 录 集) 类 对 象 连 接, 为 该 记 录集 提 供 显 示 的 视 图。 它 是 数 据 库 操 作 的 界 面。
  • CFieldExchange 类 支 持 数 据 库 的 字 段 交 换 过 程, 即RFX 机 制。
  • CDBException 类 完 成 数 据 库 类 操 作 的 异 常 处 理。 用 户 可 根 据 其 中 公 用 成 员变 量 的 取 值 来 分 析 出 现 错 误 的 原 因 或 显 示 出 相 应 的 文 本 信 息。

---- 以 下 我 们 利 用VC 中 的AppWizard 生 成一 个 简 单 的 示 例 程 序 以 供 使 用:

---- 1. 选 择[File] 中 的[New], 在 弹 出 的对 话 框 中 选 择 文 件 类 型 为[MFC AppWizard(EXE)]。 在[Project name] 中 键 入 文件 名, 如:testodbc, 点 按[OK] 按 钮。

---- 2. 在 程 序 类 型 中 选 择[Single document], 点 按[Next] 按 钮。

---- 3. 在 数 据 库 支 持 中 选 择[Database view with file support], 点 按[Data source] 按 钮 进 入 数 据 库 选 择 对 话框。

---- 4. 在[Datasource] 中 选 择[ODBC],然 后 在 下 拉 列 表 中 选 择 [Visual Foxpro Tables]。[Recordset type] 设 定为[Snapshot]。 点 按[OK] 按 钮 选 择 数 据 库 源 文 件:test.dbf。

---- 5. 择 了 数 据 库 源 文 件 后, 接 连 点按[Next], 生 成 程 序 所 需 的 源 文 件。

---- 此 时 生 成 以 下 各 类 及 其 对 象:

  • CAboutDlg
  • CMainFrame
  • CTestodbcApp
  • CTestodbcDoc
  • CTestodbcSet
  • CTestodbcView

RFX 简 介

---- RFX 是Record Field Exchange 的 缩写, 意 即 记 录 字 段 数 据 交 换。 它 在 用 户 选 择 的 记 录 集(Data set) 和 隐 藏 于 后 台 的数 据 源(Data source) 之 间 建 立 对 应 关 系, 使 用 户 能 通 过 操 作 此 记 录 集 来 实 现 对数 据 源 的 操 作。MFC 中 提 供 了 一 系 列RFX 调 用 函 数, 通 过 这 些 函 数, 可 以 随 时 在 记录 集 和 数 据 源 之 间 进 行 数 据 交 换, 这 种 交 换 是 双 向 的。 这 些 函 数 有:

 函 数 数 据 类 型 RFX_Bool BOOL RFX_Byte BYTE RFX_Binary CByteArray RFX_Double double RFX_Single float RFX_Int int RFX_Long lonig RFX_LongBinary CLongBinary RFX_Text CString RFX_Date Ctime

---- 它 们 大 多 有 三 个 参 数( 个 别 会 有 四 或五 个):

  • 一 个 指 向CFieldExchange 类 对 象 的 指 针;
  • 数 据 源 中 的 一 个 字 段 名;
  • 与 该 字 段 对 应 的 变 量 名。

---- 当 用AppWizard 生 成 代 码 时, 程 序 会自 动 选 择 适 当 的 函 数 与 数 据 类 型 相 匹 配。

---- 记 录 字 段 数 据 交 换 的 核 心是CRecordset 类 中 的 虚 函 数DoFieldExchange,RFX 函 数 都 在DoFieldExchange 中调 用, 它 为RFX 函 数 提 供 了 一 个 指 向CFieldExchange 类 对 象 的 指 针, 其 原 型为:

---- virtual void DoFieldExchange(CFieldExchang ? pFX);

---- 上 文 示 例 中 生 成 的CTestodbcSet 类是 从CRecordset 派 生 而 来 的, 为 了 利 用RFX 机 制, 它 声 明 了 两 个 成 员 变量:Cstring m_name 和Cstring m_age, 分 别 对 应 数 据 库 表 文 件 中 的[name] 和[age] 字 段。 在CTestodbcSet 类 重 载 的 方 法DoFieldExchange(CFieldExchange * pFX) 中, 可 以 看 到 调 用 了 两 个RFX 函 数:

---- RFX_Text(pFX, _T(“[name]”), m_name);

---- RFX_Text(pFX, _T(“[age]”), m_age);

---- pFX 参 数 即 为DoFieldExchange 传 递来 的CFieldExchange 类 对 象 指 针。

DDX 简 介

---- DDX 是Dialog Data Exchange 的 缩写, 意 即 对 话 框 数 据 交 换。 它 在 对 话 框 的 可 视 控 件(Controls) 和 成 员 变量(Member variables) 之 间 建 立 双 向 的 对 应 关 系, 使 用 户 能 通 过 对 话 框 上 的 控件 浏 览 和 修 改 变 量 的 取 值。

---- 类 似 记 录 字 段 数 据 交 换, 对 话 框 数 据交 换 的 核 心 是CRecordView 类 中 的 虚 函 数DoDataExchange,DDX 函 数 都在DoDataExchange 中 调 用, 它 为DDX 函 数 提 供 了 一 个 指 向CDataExchange 类 对 象的 指 针, 其 原 型 为:

---- virtual void DoDataExchange(CDataExchan ? pDX);

---- 进 入 函数Ctestodbc::DoDataExchange, 此 时 函 数 体 中 没 有 什 么 代 码, 因 为 我 们 并 没 有在 对 话 框 中 创 建 控 件, 也 没 有 建 立DDX 机 制。

---- 打 开 示 例 程 序 的 对 话 框 资 源, 编 辑 自动 生 成 的 对 话 框IDD_TESTODBC_FORM, 此 时, 该 对 话 框 中 仅 有 一 个 静 态 文 本 对象“TODO: Place form controls on this dialog.”。 它 是 自 动 生 成 的 提 示 性 文本, 表 示 可 在 此 对 话 框 上 添 加 控 件。 删 掉 此 文 本, 添 加 两 个 编 辑 框 对 象(Edit box)IDC_EDIT1 和IDC_EDIT2, 在IDC_EDIT1 上 按 鼠 标 右 键, 选 择 弹 出 菜 单 中的[ClasWizard] 进 入 类 属 性 编 辑 对 话 框。 选 择[Member Variables] 属 性,在[Control IDs] 中 选 择IDC_EDIT1, 然 后 按[Add Variable] 按 钮 以 选 择 与 它 对应 的 变 量, 在 下 拉 列 表 框[Member Variable name] 中 选 择m_pSet -$#@62;m_name, 按[OK] 返 回。 用 同 样 方 法 为IDC_EDIT2 选 择m_pSet -$#@62;m_age。

---- 退 出 对 话 框 编 辑, 再 进 入类CTestodbcView 源 文 件 中, 发 现 函 数DoDataExchange 中 增 加 了 两 个DDX 调 用 函数:

---- DDX_FieldText(pDX, IDC_EDIT1, m_pSet -$#@62;m_name, m_pSet);

---- DDX_FieldText(pDX, IDC_EDIT2, m_pSet -$#@62;m_age, m_pSet);

---- DDX_FieldText 函 数 在 对 话 框 的 编辑 控 件 和 记 录 的 字 段 之 间 建 立 联 系。 它 可 以 自 动 管 理 以 下 类 型 的 数据:int、short、long、DWORD、Cstring、float、double、BOOL 和BYTE。 它 的 四 个 参 数分 别 为:

  • 一 个 指 向CDataExchange 类 对 象 的 指 针;
  • 与 数 据 交 换 相 关 的 对 话 框 控 件 的ID 号;
  • 记 录 中 的 一 个 字 段;
  • 与 数 据 交 换 相 关 的 记 录 集 对 象 指 针。

---- 在DDX 双 向 数 据 交 换 中, 用 户 不 直 接调 用DoFieldExchange 函 数, 而 是 调 用 函 数UpdateData(BOOL direct), 此 函 数的direct 参 数 决 定 了 数 据 交 换 的 方 向:

---- direct=FALSE 用 记 录 的 字 段 值 更 新控 件 值

---- direct=TRUE 用 控 件 值 更 新 记 录 的字 段 值

---- 例 如 我 们 在 对 话 框 中 添 加 一个[Save] 按 钮, 在 它 的 事 件 处 理 过 程 中 将 控 件 的 值 保 存:

void CTestodbcView::OnButtonSave() { .. .. .. UpdateData(TRUE); .. .. .. }

 

 

 

http://blog.sina.com.cn/s/blog_5008a94b0100mwuh.html

你可能感兴趣的:(MFC--ODBC数据交换RFX)