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, CRecordsetFolgendes 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 benutztsprintf (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