📄 visual c++ 中 的odbc 编 程 .htm
字号:
<pre> m_pSet->AddNew(); // 在 表 的 末 尾 增 加 新 记 录 m_pSet->SetFieldNull(&(m_pSet->m_type), FALSE); m_pSet->m_type=" 电 动 机"; ... // 输 入 新 的 字 段 值 m_pSet-> Update(); // 将 新 记 录 存 入 数 据 库 m_pSet->Requery(); // 重 建 记 录 集</pre> <p><font color="#FFFFFF">----</font> <b>3 . 删 除 记 录</b> <br> <font color="#FFFFFF">----</font> 直 接 使 用Delete() 函 数, 并 且 在 调 用Delete() 函 数 之 后 不 需 调 用Update() 函 数: </p> <pre> m_pSet->Delete(); if (!m_pSet->IsEOF()) m_pSet->MoveNext(); else m_pSet->MoveLast();</pre> <p><font color="#FFFFFF">----</font> <b>4 . 修 改 记 录</b> <br> <font color="#FFFFFF">----</font> 修 改 记 录 使 用Edit() 函 数: </p> <pre> m_pSet->Edit(); // 修 改 当 前 记 录 m_pSet->m_type=" 发 电 机"; // 修 改 当 前 记 录 字 段 值 ...m_pSet->Update(); // 将 修 改 结 果 存 入 数 据 库 m_pSet->Requery();</pre> <p><font color="#FFFFFF">----</font> <b>5 . 撤 消 操 作</b> <br> <font color="#FFFFFF">----</font> 如 果 用 户 选 择 了 增 加 或 者 修 改 记 录 后 希 望 放 弃 当 前 操 作, 可 以 在 调 用Update() 函 数 之 前 调 用: </p> <p><font color="#FFFFFF">----</font> CRecordSet::Move(AFX_MOVE_REFRESH); </p> <p><font color="#FFFFFF">----</font> 来 撤 消 增 加 或 修 改 模 式, 并 恢 复 在 增 加 或 修 改 模 式 之 前 的 当 前 记 录。 其 中 的 参 数AFX_MOVE_REFRESH 的 值 为 零。 </p> <p><font color="#FFFFFF">----</font> <b>6 . 数 据 库 连 接 的 复 用</b> <br> <font color="#FFFFFF">----</font> 在CRecordSet 类 中 定 义 了 一 个 成 员 变 量m_pDatabase: </p> <p><font color="#FFFFFF">----</font> CDatabase* m_pDatabase; </p> <p><font color="#FFFFFF">----</font> 它 是 指 向 对 象 数 据 库 类 的 指 针。 如 果 在CRecordSet 类 对 象 调 用Open() 函 数 之 前, 将 一 个 已 经 打 开 的CDatabase 类 对 象 指 针 传 给m_pDatabase, 就 能 共 享 相 同 的CDatabase 类 对 象。 如: </p> <pre> CDatabase m_db; CRecordSet m_set1,m_set2; m_db.Open(_T("Super_ES")); // 建 立ODBC 连 接 m_set1.m_pDatabase=&m_db; //m_set1 复 用m_db 对 象 m_set2.m_pDatabse=&m_db; // m_set2 复 用m_db 对 象</pre> <p><font color="#FFFFFF">----</font> <b>7 .SQL 语 句 的 直 接 执 行</b> <br> <font color="#FFFFFF">----</font> 虽 然 通 过CRecordSet 类, 我 们 可 以 完 成 大 多 数 的 查 询 操 作, 而 且 在CRecordSet::Open() 函 数 中 也 可 以 提 供SQL 语 句, 但 是 有 的 时 候 我 们 还 想 进 行 一 些 其 他 操 作, 例 如 建 立 新 表, 删 除 表, 建 立 新 的 字 段 等 等, 这 时 就 需 要 使 用 到CDatabase 类 的 直 接 执 行SQL 语 句 的 机 制。 通 过 调 用CDatabase::ExecuteSQL() 函 数 来 完 成SQL 语 句 的 直 接 执 行: </p> <pre> BOOL CDB::ExecuteSQLAndReportFailure(const CString& strSQL) { TRY { m_pdb->ExecuteSQL(strSQL); // 直 接 执 行SQL 语 句 } CATCH (CDBException,e) { CString strMsg; strMsg.LoadString(IDS_EXECUTE_SQL_FAILED); strMsg+=strSQL; return FALSE; } END_CATCH return TRUE; }</pre> <p><font color="#FFFFFF">----</font> 应 当 指 出 的 是, 由 于 不 同DBMS 提 供 的 数 据 操 作 语 句 不 尽 相 同, 直 接 执 行SQL 语 句 可 能 会 破 坏 软 件 的DBMS 无 关 性, 因 此 在 应 用 中 应 当 慎 用 此 类 操 作。 </p> <p><font color="#FFFFFF">----</font> <b>8 . 动 态 连 接 表</b> <br> <font color="#FFFFFF">----</font> 表 的 动 态 连 接 可 以 利 用 在 调 用CRecordSet::Open() 函 数 时 指 定SQL 语 句 来 实 现。 同 一 个 记 录 集 对 象 只 能 访 问 具 有 相 同 结 构 的 表, 否 则 查 询 结 果 将 无 法 与 变 量 相 对 应。 </p> <pre> void CDB::ChangeTable() { if (m_pSet->IsOpen()) m_pSet->Close(); switch (m_id) { case 0: m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE, "SELECT * FROM SLOT0"); // 连 接 表SLOT0 m_id=1; break; case 1: m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE, "SELECT * FROM SLOT1"); // 连 接 表SLOT1 m_id=0; break; } }</pre> <p><font color="#FFFFFF">----</font> <b>9 . 动 态 连 接 数 据 库</b> <br> <font color="#FFFFFF">----</font> 由 于 与 数 据 库 的 连 接 是 通 过CDatabase 类 对 象 来 实 现 的, 所 以 我 们 可 以 通 过 赋 与CRecordSet 类 对 象 参 数m_pDatabase 以 连 接 不 同 数 据 库 的CDatabase 对 象 指 针, 就 可 以 动 态 连 接 数 据 库。 </p> <pre> void CDB::ChangeConnect() { CDatabase* pdb=m_pSet->m_pDatabase; pdb->Close(); switch (m_id) { case 0: if (!pdb->Open(_T("Super_ES"))) // 连 接 数 据 源Super_ES { AfxMessageBox(" 数 据 源Super_ES 打 开 失 败,"</pre> <p><font color="#FFFFFF">----</font> " 请 检 查 相 应 的ODBC 连 接", MB_OK|MB_ICONWARNING); </p> <pre> exit(0); } m_id=1; break; case 1: if (!pdb->Open(_T("Motor"))) // 连 接 数 据 源Motor { AfxMessageBox(" 数 据 源Motor 打 开 失 败,"</pre> <p><font color="#FFFFFF">----</font> " 请 检 查 相 应 的ODBC 连 接", MB_OK|MB_ICONWARNING); </p> <pre> exit(0); } m_id=0; break; } }</pre> <h3><font color="#0000C0">四 . 总 结</font></h3> <h3><font color="#FFFFFF">----</font> Visual C++ 中 的ODBC 类 库 可 以 帮 助 程 序 员 完 成 绝 大 多 数 的 数 据 库 操 作。 利 用ODBC 技 术 使 得 程 序 员 从 具 体 的DBMS 中 解 脱 出 来, 从 而 极 大 的 减 少 了 软 件 开 发 的 工 作 量, 缩 短 开 发 周 期, 提 高 了 效 率 和 软 件 的 可 靠 性。 本 文 总 结 的 笔 者 从 事 软 件 开 发 的 一 些 经 验 心 得 希 望 对 从 事ODBC 开 发 的 工 作 者 有 所 帮 助。 </h3> <h3><font color="#0000C0">参 考 文 献 </font></h3> <ol> <li>《Visual C++ 技 术 内 幕( 第 二 版)》,[ 美] David J.Kruglinski, 清 华 大 学 出 版 社,1996。 <br> </li> <li>《Visual C++4.0 教 程》,Microsoft 著, 何 晓 刚 等 译, 科 学 出 版 社 等 出 版,1997。 <br> </li> <li>《ODBC 深 入 剖 析》,[ 美] Kyle Geiger 著, 曹 康 等 译, 电 子 工 业 出 版 社,1996。 </li> </ol> </td> </tr></table></center></div></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -