日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在ODBC中应用DDX和RFX

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在ODBC中应用DDX和RFX 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在ODBC中應用DDX和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);
.. .. ..
}
DDX 和RFX 的 關 系 及 比 較
---- 從 上 面 可 以 看 出,RFX 是 數 據 庫 編 程 中 數 據 交 換 的 內 部 基 礎, 它 更 緊 密 地 與 記 錄 集 對 象(CRecordset) 相 聯 系, 是 隱 于 后 臺 的;DDX 是 數 據 庫 編 程 中 數 據 交 換 在 對 話 框 界 面 上 實 現 的 基 礎, 它 更 緊 密 地 與 視 圖 對 象(CRecordView) 相 聯 系, 是 顯 現 于 前 臺 的。 最 后 我 們 用 一 幅 圖 更 直 觀 地 展 示 它 們 的 關 系:

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的在ODBC中应用DDX和RFX的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。