⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 visual c++ 中 的odbc 编 程 .htm

📁 VC的一些技巧性文档
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html><body background="di2001.jpg"><head><meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80"><meta name="GENERATOR" content="Microsoft FrontPage 3.0"><title>VisualC++中的ODBC编程 </title><style type="text/css"><!--.10V {font-size: 9pt; font-family: 宋体;text-decoration:none;color="0000ff";}.12V {font-size: 12pt; font-family: 宋体;}--></style></head><body bgcolor="#FFFFFF"><p> </p><h2 align="center"><font color="#0000FF">Visual C++ 中 的ODBC 编 程 </font></h2><div align="center"><center><table border="0" cellpadding="0" cellspacing="0" width="80%">  <tr>    <td valign="top"><h3 align="center">华 中 理 工 大 学 电 力 工 程 系<font    color="#FFFFFF">--</font>董 毅 </h3>    <p><font color="#FFFFFF"><br>    ----</font> <b>摘 要:</b>ODBC(Open Database Connectivity, 开 放 式 数 据 库     连 接), 是 一 种 用 来 在 相 关 或 不 相 关 的 数 据 库 管 理 系     统(DBMS) 中 存 取 数 据 的 标 准 应 用 程 序 接 口(API)。 本 文     给 出Windows 95 环 境 下 用Visual C++ 进 行ODBC 编 程 的 具 体 方 法 及     技 巧。 <br>    <font color="#FFFFFF">----</font> <b>关 键 字:</b>ODBC,Visual C++,Windows 编     程。 </p>    <h3><font color="#0000C0">一 . 概 述</font></h3>    <h3><font color="#FFFFFF">----</font> ODBC 是 一 种 使 用SQL 的 程 序 设 计 接     口。 使 用ODBC 让 应 用 程 序 的 编 写 者 避 免 了 与 数 据 源 相 联     的 复 杂 性。 这 项 技 术 目 前 已 经 得 到 了 大 多 数DBMS 厂 商 们     的 广 泛 支 持。 </h3>    <p><font color="#FFFFFF">----</font> Microsoft Developer Studio 为 大 多 数 标 准     的 数 据 库 格 式 提 供 了32 位ODBC 驱 动 器。 这 些 标 准 数 据 格     式 包 括 有:SQL Server、Access、Paradox、dBase、FoxPro、Excel、Oracle 以 及Microsoft     Text。 如 果 用 户 希 望 使 用 其 他 数 据 格 式, 用 户 需 要 相 应     的ODBC 驱 动 器 及DBMS。 </p>    <p><font color="#FFFFFF">----</font> 用 户 使 用 自 己 的DBMS 数 据 库 管 理     功 能 生 成 新 的 数 据 库 模 式 后, 就 可 以 使 用ODBC 来 登 录 数     据 源。 对 用 户 的 应 用 程 序 来 说, 只 要 安 装 有 驱 动 程     序, 就 能 注 册 很 多 不 同 的 数 据 库。 登 录 数 据 库 的 具 体     操 作 参 见 有 关ODBC 的 联 机 帮 助。 </p>    <h3><font color="#0000C0">二 .MFC 提 供 的ODBC 数 据 库 类</font></h3>    <h3><font color="#FFFFFF">----</font> Visual C++ 的MFC 基 类 库 定 义 了 几 个     数 据 库 类。 在 利 用ODBC 编 程 时, 经 常 要 使 用 到 CDatabase( 数     据 库 类),CRecordSet( 记 录 集 类) 和CRecordView( 可 视 记 录 集 类)。     其 中: </h3>    <p><font color="#FFFFFF">----</font> CDatabase 类 对 象 提 供 了 对 数 据 源 的     连 接, 通 过 它 你 可 以 对 数 据 源 进 行 操 作。 </p>    <p><font color="#FFFFFF">----</font> CRecordSet 类 对 象 提 供 了 从 数 据 源     中 提 取 出 的 记 录 集。CRecordSet 对 象 通 常 用 于 两 种 形 式:     动 态 行 集(dynasets) 和 快 照 集(snapshots)。 动 态 行 集 能 保     持 与 其 他 用 户 所 做 的 更 改 保 持 同 步。 快 照 集 则 是 数 据     的 一 个 静 态 视 图。 每 一 种 形 式 在 记 录 集 被 打 开 时 都 提     供 一 组 记 录, 所 不 同 的 是, 当 你 在 一 个 动 态 行 集 里 滚     动 到 一 条 记 录 时, 由 其 他 用 户 或 是 你 应 用 程 序 中 的 其     他 记 录 集 对 该 记 录 所 做 的 更 改 会 相 应 地 显 示 出 来。 </p>    <p><font color="#FFFFFF">----</font> CRecordView 类 对 象 能 以 控 制 的 形 式     显 示 数 据 库 记 录。 这 个 视 图 是 直 接 连 到 一 个CRecordSet 对     象 的 表 视 图。 </p>    <h3><font color="#0000C0">三 . 应 用ODBC 编 程</font></h3>    <h3><font color="#FFFFFF">----</font> 应 用Visual C++ 的AppWizard 可 以 自 动 生     成 一 个ODBC 应 用 程 序 框 架。 方 法 是: 打 开File 菜 单 的New 选     项, 选 取Projects, 填 入 工 程 名, 选 择MFC AppWizard (exe), 然 后 按AppWizard     的 提 示 进 行 操 作。 当AppWizard 询 问 是 否 包 含 数 据 库 支 持     时, 如 果 你 想 读 写 数 据 库, 那 么 选 定Database view with file     support; 而 如 果 你 想 访 问 数 据 库 的 信 息 而 不 想 回 写 所 做     的 改 变, 那 么 选 定Database view without file support 选 项 就 比 较 合     适 了。 选 择 了 数 据 库 支 持 之 后Database Source 按 钮 会 激 活,     选 中 它 去 调 用Data Options 对 话 框。 在Database Options 对 话 框 中 会     显 示 已 向ODBC 注 册 的 数 据 库 资 源, 选 定 你 所 要 操 作 的 数     据 库, 如:Super_ES, 单 击OK 后 会 出 现Select Database Tables 对 话     框, 其 中 列 举 了 你 所 选 中 的 数 据 库 中 包 含 的 全 部 表,     选 择 你 希 望 操 作 的 表 后, 单 击OK。 在 选 定 了 数 据 库 和     数 据 表 之 后, 你 可 以 按 照 惯 例 继 续 进 行AppWizard 操 作。 </h3>    <p><font color="#FFFFFF">----</font> 特 别 需 要 指 出 的 是: 在 生 成 的     应 用 程 序 框 架View 类( 如:CSuper_ESView) 中 包 含 一 个 指 向CSuper_ESSet     对 象 的 指 针m_pSet, 该 指 针 由AppWizard 建 立, 目 的 是 在 视 表     单 和 记 录 集 之 间 建 立 联 系, 使 得 记 录 集 中 的 查 询 结 果     能 够 很 容 易 地 在 视 表 单 上 显 示 出 来。 有 关m_pSet 的 详 细     用 法 可 以 参 见Visual C++ Online Book。 </p>    <p><font color="#FFFFFF">----</font> 程 序 与 数 据 语 言 建 立 联 系, 使     用CDatebase::OpenEx() 或CDatabase::Open() 函 数 来 进 行 初 始 化。 数 据 库     对 象 必 须 在 你 使 用 它 构 造 一 个 记 录 集 对 象 之 前 被 初     始 化。 </p>    <p><font color="#FFFFFF">----</font> 下 面 举 例 说 明 在Visual C++ 环 境 中ODBC     的 编 程 技 巧: </p>    <p><font color="#FFFFFF">----</font> <b>1 . 查 询 记 录</b> <br>    <font color="#FFFFFF">----</font> 查 询 记 录 使 用CRecordSet::Open() 和CRecordSet::Requery()     成 员 函 数。 在 使 用CRecordSet 类 对 象 之 前, 必 须 使 用CRecordSet::Open()     函 数 来 获 得 有 效 的 记 录 集。 一 旦 已 经 使 用 过CRecordSet::Open()     函 数, 再 次 查 询 时 就 可 以 应 用CRecordSet::Requery() 函 数。 在 调     用CRecordSet::Open() 函 数 时, 如 果 已 经 将 一 个 已 经 打 开 的CDatabase     对 象 指 针 传 给CRecordSet 类 对 象 的m_pDatabase 成 员 变 量, 则 使     用 该 数 据 库 对 象 建 立ODBC 连 接; 否 则 如 果m_pDatabase 为 空 指     针, 就 新 建 一 个CDatabase 类 对 象 并 使 其 与 缺 省 的 数 据 源     相 连, 然 后 进 行CRecordSet 类 对 象 的 初 始 化。 缺 省 数 据 源     由GetDefaultConnect() 函 数 获 得。 你 也 可 以 提 供 你 所 需 要 的SQL     语 句, 并 以 它 来 调 用CRecordSet::Open() 函 数, 例 如: </p>    <p><font color="#FFFFFF">----</font> Super_ESSet.Open(AFX_DATABASE_USE_DEFAULT,strSQL); </p>    <p><font color="#FFFFFF">----</font> 如 果 没 有 指 定 参 数, 程 序 则 使     用 缺 省 的SQL 语 句, 即 对 在GetDefaultSQL() 函 数 中 指 定 的SQL 语     句 进 行 操 作: </p>    <pre>	CString CSuper_ESSet::GetDefaultSQL(){return _T(&quot;[BasicData],[MainSize]&quot;);}</pre>    <p><font color="#FFFFFF">----</font> 对 于GetDefaultSQL() 函 数 返 回 的 表 名,     对 应 的 缺 省 操 作 是SELECT 语 句, 即: </p>    <p><font color="#FFFFFF">----</font> SELECT * FROM BasicData,MainSize </p>    <p><font color="#FFFFFF">----</font> 查 询 过 程 中 也 可 以 利 用CRecordSet 的     成 员 变 量m_strFilter 和m_strSort 来 执 行 条 件 查 询 和 结 果 排 序。m_strFilter     为 过 滤 字 符 串, 存 放 着SQL 语 句 中WHERE 后 的 条 件 串;m_strSort     为 排 序 字 符 串, 存 放 着SQL 语 句 中ORDER BY 后 的 字 符 串。     如: </p>    <pre>	Super_ESSet.m_strFilter=&quot;TYPE=' 电 动 机'&quot;;	Super_ESSet.m_strSort=&quot;VOLTAGE&quot;;	Super_ESSet.Requery();	 对 应 的SQL 语 句 为:	SELECT * FROM BasicData,MainSize 	WHERE TYPE=' 电 动 机'	ORDER BY VOLTAGE</pre>    <p><font color="#FFFFFF">----</font> 除 了 直 接 赋 值 给m_strFilter 以 外, 还     可 以 使 用 参 数 化。 利 用 参 数 化 可 以 更 直 观, 更 方 便 地     完 成 条 件 查 询 任 务。 使 用 参 数 化 的 步 骤 如 下: </p>    <p><font color="#FFFFFF">----</font> (1) . 声 明 参 变 量: </p>    <pre>	CString p1;	float p2;</pre>    <p><font color="#FFFFFF">----</font> (2) . 在 构 造 函 数 中 初 始 化 参 变     量 </p>    <pre>	p1=_T(&quot;&quot;);	p2=0.0f;	m_nParams=2;</pre>    <p><font color="#FFFFFF">----</font> (3) . 将 参 变 量 与 对 应 列 绑 定 </p>    <pre>	pFX-&gt;SetFieldType(CFieldExchange::param)	RFX_Text(pFX,_T(&quot;P1&quot;),p1);	RFX_Single(pFX,_T(&quot;P2&quot;),p2);</pre>    <p><font color="#FFFFFF">----</font> 完 成 以 上 步 骤 之 后 就 可 以 利 用     参 变 量 进 行 条 件 查 询 了: </p>    <pre>	m_pSet-&gt;m_strFilter=&quot;TYPE=? AND VOLTAGE=?&quot;;	m_pSet-&gt;p1=&quot; 电 动 机&quot;;	m_pSet-&gt;p2=60.0;	m_pSet-&gt;Requery();</pre>    <p><font color="#FFFFFF">----</font> 参 变 量 的 值 按 绑 定 的 顺 序 替 换     查 询 字 串 中 的“?” 适 配 符。 </p>    <p><font color="#FFFFFF">----</font> 如 果 查 询 的 结 果 是 多 条 记 录 的     话, 可 以 用CRecordSet 类 的 函 数Move(),MoveNext(), MovePrev(),MoveFirst()     和MoveLast() 来 移 动 光 标。 </p>    <p><font color="#FFFFFF">----</font> <b>2 . 增 加 记 录</b> <br>    <font color="#FFFFFF">----</font> 增 加 记 录 使 用AddNew() 函 数, 要 求 数     据 库 必 须 是 以 允 许 增 加 的 方 式 打 开: </p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -