我正在使用 RFX(记录字段交换)将数据从 ODBC 数据源移动到我的 Recordset 对象。数字与RFX_Int (within DoFieldExchange
) 一起移动,显然数据库 NULL (not a value) 被映射到一个伪 null value AFX_RFX_INT_PSEUDO_NULL
。不幸的是,这个标记值被定义为0x7ee4
十进制的 32484。该值位于可能的int
数字范围的中间,并且是我的应用程序的有效数字!
以下代码部分给出了错误的结果,其中包含(有效)值 32484 in 的记录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;
}
我怎么能解决这个问题?
伪空值在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