1
我正在使用RFX(Record Field Exchange)将数据从ODBC数据源移动到我的Recordset对象。数字与RFX_Int(在DoFieldExchange
内)一起移动,显然数据库NULL(不是值)被映射到伪空值AFX_RFX_INT_PSEUDO_NULL
。不幸的是,这个标记值被定义为0x7ee4
或者十进制的32484。该值位于可能的int
数字范围的中间,并且是我的应用程序的有效数字!使用MFC读取NULL值RFX(记录字段交换)
以下代码部分给出包含(有效)值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;
}
我该如何解决这个问题?
伪空值在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
[RFX_Int](http://msdn.microsoft.com/en-us/library/s14b12eb(v = vs.80).aspx)期望'int&'作为第三个参数,'RFX_Long'需要'&LONG',但是在DoDataExchange中有一个临时的'LONG'变量,并且(在调用'RFX_Long'后)将其赋值给'mainarticle',我可以接受你的建议。感谢您的回答! – 2013-03-26 17:48:18
@ChristianAmmer,微软的土地'int'和'long'是一样的。 'LONG'在'WinNT.h'中键入'long'。你不应该需要暂时的。 – 2013-03-26 18:03:55