RFX(Record Field Exchange)を使用して、ODBCデータソースからRecordsetオブジェクトにデータを移動しています。数値はRFX_Int(内DoFieldExchange
)で移動され、データベースNULL(値ではない)が疑似null値にマップされているようですAFX_RFX_INT_PSEUDO_NULL
。残念ながら、この番兵の値は0x7ee4
10進数でまたは32484として定義されています。この値は可能なint
数値範囲の中央にあり、私のアプリケーションにとって有効な数値です。
次のコード部分は、に(有効な)値32484を含むレコードで間違った結果を示しますmainarticle
。
std::vector<Article> getArticles() {
std::vector<Article> res;
CArticleRecordset tmp(&con.GetConnectedDB());
tmp.Open();
while (!tmp.IsEOF()) {
if (tmp.m_article.mainarticle == AFX_RFX_INT_PSEUDO_NULL)
tmp.m_article.mainarticle = 0;
res.push_back(tmp.m_article);
tmp.MoveNext();
}
return res;
}
どうすればこれを解決できますか?
疑似null値は、afxdb_.h
(Visual Studio 2010)で定義されています。
#define AFX_RFX_SHORT_PSEUDO_NULL (0x7EE4)
#define AFX_RFX_INT_PSEUDO_NULL (0x7EE4)
#define AFX_RFX_LONG_PSEUDO_NULL (0x4a4d4120L)
#define AFX_RFX_BIGINT_PSEUDO_NULL (0x4a4d4120L)
#define AFX_RFX_BYTE_PSEUDO_NULL 255