[問題] MFC 讀取 ODBC 資料庫錯誤 "參數太少,預期個數 2"
小弟最近寫了一個讀取資料庫的程式
利用 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
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章