1

RFX(Record Field Exchange)を使用して、ODBCデータソースからRecordsetオブジェクトにデータを移動しています。数値はRFX_Int(内DoFieldExchange)で移動され、データベースNULL(値ではない)が疑似null値にマップされているようですAFX_RFX_INT_PSEUDO_NULL。残念ながら、この番兵の値は0x7ee410進数でまたは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
4

1 に答える 1

3

RFX_Int名前が不十分で、短い整数で使用することを目的としていました。RFX_Long代わりに使用してください。

于 2013-03-26T17:38:01.177 に答える