[問題] MFC 讀取 ODBC 資料庫錯誤 "參數太少,預期個數 2"

看板C_and_CPP (C/C++)作者 (小乖)時間16年前 (2009/09/29 18:15), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
小弟最近寫了一個讀取資料庫的程式 利用 MFC 讀取資料庫感覺還蠻方便的 不過今天遇到一個問題 先描述一下整個架構如下所示: ==================================================== //.h 檔 class CNodeInfo : public CRecordset { public: CNodeInfo(CDatabase* pDatabase = NULL); DECLARE_DYNAMIC(CNodeInfo) long m_NodeID; CStringW m_Description; CStringW m_HostName; // 略 public: virtual CString GetDefaultConnect(); // Default connection string virtual CString GetDefaultSQL(); // default SQL for Recordset virtual void DoFieldExchange(CFieldExchange* pFX); // RFX support }; //.cpp void CNodeInfo::DoFieldExchange(CFieldExchange* pFX) { pFX->SetFieldType(CFieldExchange::outputColumn); RFX_Long(pFX, _T("[NodeID]"), m_NodeID); RFX_Text(pFX, _T("[Description]"), m_Description); RFX_Text(pFX, _T("[HostName]"), m_HostName); } // 使用 CNodeInfo m_nodeInfo; m_nodeInfo.Open(); // 讀取DB ===================================================== 之前跑的時候都沒有問題,不過今天使用的時候,卻發生錯誤 "參數太少,預期個數 2" 看到這個訊息時,我呆了幾秒鐘,我的 "debug message" 並沒有這個訊息,當場讓我再客戶面前跌了一個大股 (淚奔) 回到自己的座位 google 一下,大概知道了原因 http://topic.csdn.net/t/20040402/15/2918253.html 以下是DB的示意圖 (正常運作的資料庫) ================================ NodeID Description HostName 101 天上人間 桃園 102 浮華一生 台北 ================================ (出現 "參數太少,預期個數 2" 的錯誤訊息) ================================ NodeID Description HostName 101 102 ================================ 原因在於 Description 和 HostName 在 MFC 的中被視為 CString eq. CStringW m_Description; 而資料交換的 code "RFX_Text(pFX, _T("[Description]"), m_Description);" 在 m_nodeInfo.Open(); 的時候就會作存取,此時我的資料庫 Description 和 HostName 是空的 (NULL) 因此造成錯誤訊息 我把 RFX_Text(pFX, _T("[Description]"), m_Description); 註解掉 錯誤訊息就不會存在,但因此這個欄位就不會被轉換了 請問有這種可以接受 CString 又可以接受 NULL 的解法嗎? 或是有什麼解決方法... 請各位高手給些意見 謝謝 ps. 我不想用直接用 SDK 阿~~~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.96.34
文章代碼(AID): #1AmTv6r0 (C_and_CPP)
文章代碼(AID): #1AmTv6r0 (C_and_CPP)