Was passiert bei diesem Code?



  • Hallo hab dein Beispiel Projekt zu ADO dort ist jetzt ein Code den ich nciht versteh?

    CString CrackStrVariant(const _variant_t&  var)
    {
        CString strRet;
        strRet = _T("Fish");
        switch(var.vt){
        case VT_EMPTY:
        case VT_NULL:
            strRet = _T("NULL");
            break;
        case VT_I2:
            strRet.Format(_T("%hd"),V_I2(&var));
            break;
        case VT_I4:
            strRet.Format(_T("%d"),V_I4(&var));
            break;
        case VT_R4:
            strRet.Format(_T("%e"),(double)V_R4(&var));
            break;
        case VT_R8:
            strRet.Format(_T("%e"),V_R8(&var));
            break;
        case VT_CY:
            strRet = COleCurrency(var).Format();
            break;
        case VT_DATE:
            strRet = COleDateTime(var).Format(_T("%m %d %y"));
            break;
        case VT_BSTR:
            strRet = V_BSTR( &var );
            break;
        case VT_DISPATCH:
            strRet = _T("VT_DISPATCH");
            break;
        case VT_ERROR:
            strRet = _T("VT_ERROR");
            break;
        case VT_BOOL:
            return ( V_BOOL(&var) ? _T("TRUE") : _T("FALSE"));
        case VT_VARIANT:
            strRet = _T("VT_VARIANT");
            break;
        case VT_UNKNOWN:
            strRet = _T("VT_UNKNOWN");
            break;
        case VT_I1:
            strRet = _T("VT_I1");
            break;
        case VT_UI1:
            strRet.Format(_T("0x%02hX"),(unsigned short)V_UI1(&var));
            break;
        case VT_UI2:
            strRet = _T("VT_UI2");
            break;
        case VT_UI4:
            strRet = _T("VT_UI4");
            break;
        case VT_I8:
            strRet = _T("VT_I8");
            break;
        case VT_UI8:
            strRet = _T("VT_UI8");
            break;
        case VT_INT:
            strRet = _T("VT_INT");
            break;
        case VT_UINT:
            strRet = _T("VT_UINT");
            break;
        case VT_VOID:
            strRet = _T("VT_VOID");
            break;
        case VT_HRESULT:
            strRet = _T("VT_HRESULT");
            break;
        case VT_PTR:
            strRet = _T("VT_PTR");
            break;
        case VT_SAFEARRAY:
            strRet = _T("VT_SAFEARRAY");
            break;
        case VT_CARRAY:
            strRet = _T("VT_CARRAY");
            break;
        case VT_USERDEFINED:
            strRet = _T("VT_USERDEFINED");
            break;
        case VT_LPSTR:
            strRet = _T("VT_LPSTR");
            break;
        case VT_LPWSTR:
            strRet = _T("VT_LPWSTR");
            break;
        case VT_FILETIME:
            strRet = _T("VT_FILETIME");
            break;
        case VT_BLOB:
            strRet = _T("VT_BLOB");
            break;
        case VT_STREAM:
            strRet = _T("VT_STREAM");
            break;
        case VT_STORAGE:
            strRet = _T("VT_STORAGE");
            break;
        case VT_STREAMED_OBJECT:
            strRet = _T("VT_STREAMED_OBJECT");
            break;
        case VT_STORED_OBJECT:
            strRet = _T("VT_STORED_OBJECT");
            break;
        case VT_BLOB_OBJECT:
            strRet = _T("VT_BLOB_OBJECT");
            break;
        case VT_CF:
            strRet = _T("VT_CF");
            break;
        case VT_CLSID:
            strRet = _T("VT_CLSID");
            break;
        }
        WORD vt = var.vt;
        if(vt & VT_ARRAY){
            vt = vt & ~VT_ARRAY;
            strRet = _T("Array of ");
        }
        if(vt & VT_BYREF){
            vt = vt & ~VT_BYREF;
            strRet += _T("Pointer to ");
        }
        if(vt != var.vt){
            switch(vt){
            case VT_EMPTY:
                strRet += _T("VT_EMPTY");
                break;
            case VT_NULL:
                strRet += _T("VT_NULL");
                break;
            case VT_I2:
                strRet += _T("VT_I2");
                break;
            case VT_I4:
                strRet += _T("VT_I4");
                break;
            case VT_R4:
                strRet += _T("VT_R4");
                break;
            case VT_R8:
                strRet += _T("VT_R8");
                break;
            case VT_CY:
                strRet += _T("VT_CY");
                break;
            case VT_DATE:
                strRet += _T("VT_DATE");
                break;
            case VT_BSTR:
                strRet += _T("VT_BSTR");
                break;
            case VT_DISPATCH:
                strRet += _T("VT_DISPATCH");
                break;
            case VT_ERROR:
                strRet += _T("VT_ERROR");
                break;
            case VT_BOOL:
                strRet += _T("VT_BOOL");
                break;
            case VT_VARIANT:
                strRet += _T("VT_VARIANT");
                break;
            case VT_UNKNOWN:
                strRet += _T("VT_UNKNOWN");
                break;
            case VT_I1:
                strRet += _T("VT_I1");
                break;
            case VT_UI1:
                strRet += _T("VT_UI1");
                break;
            case VT_UI2:
                strRet += _T("VT_UI2");
                break;
            case VT_UI4:
                strRet += _T("VT_UI4");
                break;
            case VT_I8:
                strRet += _T("VT_I8");
                break;
            case VT_UI8:
                strRet += _T("VT_UI8");
                break;
            case VT_INT:
                strRet += _T("VT_INT");
                break;
            case VT_UINT:
                strRet += _T("VT_UINT");
                break;
            case VT_VOID:
                strRet += _T("VT_VOID");
                break;
            case VT_HRESULT:
                strRet += _T("VT_HRESULT");
                break;
            case VT_PTR:
                strRet += _T("VT_PTR");
                break;
            case VT_SAFEARRAY:
                strRet += _T("VT_SAFEARRAY");
                break;
            case VT_CARRAY:
                strRet += _T("VT_CARRAY");
                break;
            case VT_USERDEFINED:
                strRet += _T("VT_USERDEFINED");
                break;
            case VT_LPSTR:
                strRet += _T("VT_LPSTR");
                break;
            case VT_LPWSTR:
                strRet += _T("VT_LPWSTR");
                break;
            case VT_FILETIME:
                strRet += _T("VT_FILETIME");
                break;
            case VT_BLOB:
                strRet += _T("VT_BLOB");
                break;
            case VT_STREAM:
                strRet += _T("VT_STREAM");
                break;
            case VT_STORAGE:
                strRet += _T("VT_STORAGE");
                break;
            case VT_STREAMED_OBJECT:
                strRet += _T("VT_STREAMED_OBJECT");
                break;
            case VT_STORED_OBJECT:
                strRet += _T("VT_STORED_OBJECT");
                break;
            case VT_BLOB_OBJECT:
                strRet += _T("VT_BLOB_OBJECT");
                break;
            case VT_CF:
                strRet += _T("VT_CF");
                break;
            case VT_CLSID:
                strRet += _T("VT_CLSID");
                break;
            }
        }
        return strRet;
    }
    

    was ist das ist das der Zugriff auf die Datenbankfelder oder was?

    PS: Wenn ichg ADO benutze muss ich da mit einer Header Datei arbeite in der ich mit ADORecordBinding arbeiten, oder kann ich auch anders mit ADO arbeiten, so dass ich wie oben in diesem Projekt wird auch keine .h Datei verwendet?

    Danke für Euro hilfe!



  • Wie schon in mehreren anderen Beiträgen erläutert ist ADO das Interface für Interpretersprachen. Diese unterstützen nunmal hauptsächlich Strings. Wenn DU also unter C++ ADO nutzen willst, müssen Deine schönen Datentypen als erstes in Strings umgewandelt werden, um danach von ADO ausgewertet und bei Zugriff auf die darunter liegende OLEDB-Schnittstelle wiederum in diese Datentypen umgewandelt werden. Ersteren Teil macht diese Funktion.


Anmelden zum Antworten