2010-12-13 2 views
1

Ich habe ein altes MFC-Projekt, das ich erweitern muss. Für Datenbankoperationen verwende ich eine Klasse, die von CRecordSet abgeleitet ist, und binde Oracle BLOB an CByteArray. Wenn ich eine Zeile mit einem Null-Blob abrufe, erhalte ich ein Array mit der Größe 1 Byte und dem Wert 0xFF. Gibt es eine Möglichkeit zu überprüfen, ob ein Feld in der Datenbank tatsächlich NULL ist? Oder ist dieses 0xFF-Array tatsächlich ein Wert, der ein Null-BLOB bezeichnet?Handle NULL BLOB-s in MFC

Antwort

2

OK, ich habe es gefunden. Die Funktion ist CRecordset :: IsFieldNull, der Parameter ist die Adresse des gebundenen CByteArray-Objekts und die Funktion kann nur zwischen Open() und Close() verwandt werden. Etwas wie dieses:

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