2010-12-13 50 views
1

J'ai un ancien projet MFC dont j'ai besoin pour développer. Pour les opérations de base de données, j'utilise une classe dérivée de CRecordSet, et lie Oracle BLOB à CByteArray. Lorsque je récupère une ligne avec un blob nul, j'obtiens un tableau avec une taille de 1 octet et une valeur 0xFF. Existe-t-il un moyen de vérifier si un champ est réellement NULL dans la base de données? Ou ce tableau 0xFF est-il réellement une valeur dénotant un BLOB nul?Gestion des BLOB-s NULL dans MFC

Répondre

2

OK, je l'ai trouvé. La fonction est CRecordset :: IsFieldNull, le paramètre est l'adresse de l'objet CByteArray lié, et la fonction peut uniquement être utilisée entre Open() et Close(). Quelque chose comme ceci:

void CMySet::DoFieldExchange(CFieldExchange* pFX) 
{ 
    ... 
    RFX_Binary(pFX, _T("[THE_BLOB]"), m_TheBlob, MAX_BLOB_SIZE); 
} 

void CMySet::ReadBlob(CByteArray& theBlob, BOOL& isNull) 
{ 
    m_strFilter = ...; 

    Open(); 

    isNull = IsFieldNull(&m_TheBlob); 

    if (!isNull) 
    theBlob.Copy(m_TheBlob); 

    Close(); 
}