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
1
A
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();
}