Ungültiger Deskriptorindex



  • Hallo,

    relativ plan- und ratlos sitze ich jetzt schon länger vor obiger Fehlermeldung.

    Eckdaten : Zugriff auf Oracle mit Microsoft ODBC Treiber, MFC Anwendung mit
    CDatabase, CRecordset

    Folgendes Statement funktioniert perfekt :

    m_CBICTable->Open (CRecordset::snapshot, "select * from BICTABLEVIEW order by BIC_CODE");

    Alternative Opens, die aber auf eine bestimmte Spalte selektieren, bringen
    obigen Fehler, also z.B.

    m_CBICTable->Open (CRecordset::snapshot, "select BIC_CODE from BICTABLEVIEW order by BIC_CODE");

    Hierbei scheint es völlig egal zu sein, welche Spalte ich anspreche, funktionieren alle nicht. Arbeitet man mit "select *", funktionieren alle
    weiteren Datenbankoperationen ( MoveNext, MovePrev etc. ) problemlos, die
    Tabelle als solche scheint i.O. zu sein.

    Für Infos jeder Art wäre ich sehr dankbar.

    tschüss, Dieter



  • Hi den Fehler hab ich auch schon de öfteren gehabt, und normalerweise ist das der Fall wenn du versuchst einen String ohne " zu senden oder eine Zahl mit " oder ähnliches. Was bei dir genau das Problem ist kann ich dir so nicht sagen, aber versuch mal alle Tabelle in [] zu setzen. Ist BIC_CODE* wirklich Tabellennamen oder verbirgt sich dahinter ein define? *(und CO)

    Wenn sich dahinter andere Ausdrücke verbergen dann lass uns doch bitte mal sehen was du wirklich schickst!
    Was du auch noch machen kannst geh mal in die Openzeile und drück strg + F10 wenn er dir dann da raus springt drück mal F11 zum dich in die OpenFkt rein zu debuggen! Und dann poste mal bitte den genauen Open String der von der MFC aus geht.



  • Wenn ich das jetzt richtig im Kopp habe kommt doch bei Strings ohne ' oder Zahlen mit ' die Meldung "Datentypen in Kriterienausdruck unverträglich"...



  • CLI0181E Ungültiger Deskriptorindex.
    Ursache: Der für das Spaltennummerargument angegebene Wert ist ungültig.

    Aktion: Geben Sie eine gültige Spaltennummer ein.

    Also ich hatte mal hier den Fehler

    m_pSet->m_strFilter = _T("[ID] = 55%"); 
        LPCTSTR lpszSQL = _T("SELECT [ID] FROM [dbo].[TRWErgebnisse] [WHERE m_pSet->m_strFilter]"); 
        m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE,lpszSQL,NULL); 
    }
    

    Dann hab ich das gemacht und es ging

    UpdateData(true); 
        m_pSet->m_strFilter = _T("([ID] like \'" + m_sSuchen + "%\')"); 
        m_pSet->Requery(); 
        UpdateData(false);
    

    😮

    @Dieter P.S.: Bitte verwende doch die Codetags



  • Vielen Dank Jungs,

    gestern spät abend hatte ich endlich die
    Lösung; da ich mir denken könnte, daß ebenfalls mal jemand
    diesen Effekt hat, hier die Lösung.

    Das Problem war die OpenEx Funktion mit CDatabase; diese habe ich
    folgendermaßen benutzt

    sprintf (Str,
             "DRIVER=%s;CONNECTSTRING=%s;UID=%s;PWD=%s",
             ORACLEDRIVER, ORACLESERVER, ORACLEUSER, ORACLEPW);
    
    if ( pDatabase->OpenEx (Str, CDatabase::useCursorLib) )
       bRet = TRUE;
    

    Das ist offensichtlich ein katastrophaler Fehler, wenn der ODBC
    Treiber standardmäßig schon Cursorsteuerung unterstützt, deshalb
    sollte man wohl auch einfach nur ein OpenEx ohne weitere Parameter
    machen; das scheint die Ursache zu sein.

    Gemacht habe ich das, weil ich davon ausgegangen bin, daß
    ich mit einem normalen OpenEx keine MoveFirst () oder MovePrev ()
    benutzen kann.

    Trotzdem vielen Dank,

    tschüss, Dieter


Anmelden zum Antworten