2013-03-26 97 views
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 

回答

3

RFX_Int名为不好,它是为了与短整数使用。改为使用RFX_Long

+0

[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

+0

@ChristianAmmer,微软的土地'int'和'long'是一样的。 'LONG'在'WinNT.h'中键入'long'。你不应该需要暂时的。 – 2013-03-26 18:03:55

相关问题