1

我正在使用 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
4

1 回答 1

3

RFX_Int名字不好,它是用来和短整数一起使用的。改为使用RFX_Long

于 2013-03-26T17:38:01.177 回答