Anfaenger: GetFieldValue, String wird als Zahl ausgegeben



  • Hi Leute,

    bin Anfaenger und versuche aus einer Datenbank ein paar Felder auszulesen und auf dem Bildschirm (Console) auszugeben. Verbindung zur Datenbank funktioniert, Zugriff auf die Felder ebenso. Nur bei der Ausgabe hakt es. Im DebugMode unter VC++ 2008 wird mir angezeigt (wenn ich die Maus ueber die Variable bewege), dass CDBVariant den gesuchten Text hinter m_pstringA verbirgt (siehe Bild1). Klick ich den Wert dann einmal mit der Maus an, wechselt er den Wert (siehe Bild2). Genau so (binaer?) wird der Inhalt des Feldes dann auch auf der Console ausgegeben.

    BILD1: http://haupt-group.de/bild1.jpg
    BILD2: http://haupt-group.de/bild2.jpg

    Hier der wichtige Code Abschnitt:

    rs.Open(rs.snapshot, _T ("SELECT * FROM t_customers"));
    
    CDBVariant varValue;
    
    /* count columns */
    int colcount = rs.GetODBCFieldCount();
    
    /* move through columns and rows and display fieldvalue */
    int col, row=1;
    while( !rs.IsEOF() )
    {
    	cout << "Row: " << row++ << endl;
    	for(col = 0; col < colcount; col++)
    	{
    		rs.GetFieldValue(col, varValue);
    		if ( varValue.m_dwType == DBVT_ASTRING ){
    			cout << "Column " << col << ": " << varValue.m_pstringA << endl;
    		}
    	}
    	rs.MoveNext();
    

    Hat jemand eine Idee woran es hier hakt? Muss ich irgendwo ein Charackter Set aendern oder muss ich manuell wieder von binaer auf string konvertieren?

    Gruss

    Stefan



  • 60 views und keiner kann helfen? 😞



  • habs raus. fuer alle die es interessiert. man kann cdbvariant.m_pstring nicht direkt ausgeben:

    falsch:

    cout << varValue.m_pstring;
    

    richtig:

    CString* string = varValue.m_pstring; 
    cout << string->GetBuffer();
    

    Gruss

    Stefan



  • Dann sollte aber eigentlich

    cout << "Column " << col << ": " << (const char *)(*(varValue.m_pstringA)) << endl;
    

    funktionieren.


  • Mod

    jencas schrieb:

    Dann sollte aber eigentlich

    cout << "Column " << col << ": " << (const char *)(*(varValue.m_pstringA)) << endl;
    

    funktionieren.

    Nein! Das ist ein brutaler cast, der aus Unicode Daten keine MBCS Daten macht.


Anmelden zum Antworten