Ungültiger Bezeichner für Attribut/Option

Silvercreast

Erfahrenes Mitglied
Guten Morgen erstmal,

ich habe ein riesen Problem mit meiner ODBC-Verbindung . Ich habe folgenden Code geschrieben um in eine Access 97 Datenbank Daten zu speichern:

Code:
    CUserRecordset user; 

    std::vector< std::string > parameters = StringHelper::split( messageFromClient, ';' ); 
                        
    CDatabase FuhrparkData; 
    CString DB_File = "Fuhrpark"; 
    CString strErgebnis; 

    TRY 
    { 
        // Open the database 

        if ( FuhrparkData.Open( DB_File ) != FALSE ) 
        { 
            std::string dataInfo = parameters[0]; 
        
            strErgebnis = 
                "Select * FROM tbl_Benutzerliste '"; 

            // Allocate the recordset 
            //CRecordset recset( &FuhrparkData ); 
            
            // Execute the query        
            if( user.Open(CRecordset::forwardOnly,strErgebnis,CRecordset::dynaset) == TRUE ); 
            { 
                user.AddNew(); 

                user.m_Benutzer            =    parameters[1].c_str(); 
                user.m_Passwort            =    parameters[2].c_str(); 
                user.m_Personalnummer    =    parameters[3].c_str(); 
                user.m_Rechte            =    parameters[4].c_str();                        

                user.Update(); 
            } 
            
            // Close the database 
            FuhrparkData.Close();        
        } 
        
        return "true"; 
    } 
    CATCH(CDBException, e) 
    { 
         e->ReportError();
    } 

    END_CATCH; 

    return "false;

An der markeirten Stelle bekomme ich eine Exeption die so lautet:
"Ungültiger Bezeichner für Attribut/Option"

Nach ein wenig recherchieren, habe ich festgestellt das ich ein SQL-Problem habe:

The SQLGetDiagRec and SQLGetDiagField functions return SQLSTATE values as defined by X/Open Data Management: Structured Query Language (SQL), Version 2 (March 1995).
SQLSTATE values are strings that contain five characters. The following table lists SQLSTATE values that a driver can return for SQLGetDiagRec.
The character string value returned for an SQLSTATE consists of a two-character class value followed by a three-character subclass value. A class value of 01 indicates a warning and is accompanied by a return code of SQL_SUCCESS_WITH_INFO. Class values other than '01', except for the class 'IM', indicate an error and are accompanied by a return code of SQL_ERROR. The class 'IM' is specific to warnings and errors that derive from the implementation of ODBC itself. The subclass value '000' in any class indicates that there is no subclass for that SQLSTATE. The assignment of class and subclass values is defined by SQL-92.
Note: Although successful execution of a function is normally indicated by a return value of SQL_SUCCESS, the SQLSTATE 00000 also indicates success.


Nun weiss ich aber nicht wie ich diesen Fehler beheben kann, da ich ausser mit ODBC noch nicht großartig mit SQL gearbeitet habe.
Kann mir jemand helfen
 
Auf den ersten Blick würde ich sagen, es liegt an dem einfachen Apostrophen in deinem SQL-String:

"Select * FROM tbl_Benutzerliste '";
 
Nach langem hin und her hab ich den Fehler gefunden :) endlich.
Ich habe eine total verkorkste open() Methode geschrieben:

Code:
 if( user.Open(CRecordset::forwardOnly,strErgebnis,CRecordset::dynaset) == TRUE );

Ausserdem habe ich ein Semikolon gesetzt was da überhaupt nichts zu suchen hat, ich frag ich nur wieso der Compiler nicht gemeckert hat.

Die richtige open() Methode muss in meinem Fall so Aussehen:

Code:
if( user.Open( CRecordset::dynaset, strErgebnis ) == TRUE ))

Hmm so ein dummer Fehler und so ein riesen Aufwand :( naja hauptsache gelöst :)
 
Zurück