MFC中ODBC类库简介
---- MFC 中 针 对ODBC 数 据 库 编 程 提 供 了五 种 基 类。 这 些 类 封 装 了 有 关ODBC 的API 调 用, 使 用 户 能 够 利 用ODBC 完 成 不 同 类型 的 数 据 库 编 程 工 作, 如 访 问Foxpro、dBASE 或Sybase 等 不 同 类 型 数 据 库 文 件, 从而 避 开 各 种 类 型 数 据 库 文 件 的 复 杂 的 内 部 结 构。 这 五 种 基 类 是:
---- 以 下 我 们 利 用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], 生 成 程 序 所 需 的 源 文 件。
---- 此 时 生 成 以 下 各 类 及 其 对 象:
---- 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
---- 它 们 大 多 有 三 个 参 数( 个 别 会 有 四 或五 个):
---- 当 用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 是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。 它 的 四 个 参 数分 别 为:
---- 在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