CADORecordset::GetFieldValue()



  • Guten Morgen!

    Ich habe ein Problem mit dem CADORecordset. Ich will mit GetFieldValue den Wert einlesen. Die Verbindung mit der Datenbank und Tabelle steht. Jetzt will ich mit:

    CString wert = "";
    while ( !rec.IsEOF() ) {
    rec.GetFieldValue( 2, wert ); 
    // mit "wert" arbeiten
    rec.MoveNext();
    }
    

    Die Werte in der 3. Spalte in wert schreiben. Allerdings bleib "wert" immer "" und es wird nie was dortrein geschrieben, obwohl in der DB Daten sind.

    Was mache ich falsch? Wer kann helfen?



  • Das ist doch verrückt. Oft wenn ich etwas poste, löse ich das Problem ein paar Minuten später selbst! Dabei hab ich schon Stunden gesucht... Statt der 2 muss da natürlich eine 0 rein und gut ist!



  • plizer schrieb:

    Das ist doch verrückt. Oft wenn ich etwas poste, löse ich das Problem ein paar Minuten später selbst! Dabei hab ich schon Stunden gesucht...

    Das ist völlig normal. 😃
    Due brauchst einfach nur jemanden, dem du alles nochmal ganz genau erklärst - damit erklärst du es auch dir selbst nochmal und findest meist etwas, was du sonst übersiehst.
    Ich erkläre bei besonders hartnäckigen Fehlern sowas immer erstmal dem Kollegen (obwohl der kein C++ kann) und dann fällt es entweder mir oder ihm auf, weil die Erklärung nicht so ganz schlüssig war. 😉



  • estartu schrieb:

    plizer schrieb:

    Das ist doch verrückt. Oft wenn ich etwas poste, löse ich das Problem ein paar Minuten später selbst! Dabei hab ich schon Stunden gesucht...

    Das ist völlig normal. 😃
    Due brauchst einfach nur jemanden, dem du alles nochmal ganz genau erklärst - damit erklärst du es auch dir selbst nochmal und findest meist etwas, was du sonst übersiehst.
    Ich erkläre bei besonders hartnäckigen Fehlern sowas immer erstmal dem Kollegen (obwohl der kein C++ kann) und dann fällt es entweder mir oder ihm auf, weil die Erklärung nicht so ganz schlüssig war. 😉

    Stimmt da ist etwas dran! 🙂 Man verschafft sich mit einer Erklärung auch selbst nochmal einen Überblick!



  • Jetzt hab ich allerdings noch ein anderes Problem, mit:

    rec.Open(sqlQuery, CADORecordset::openQuery );
    

    lässt sich problemlos eine SELECT Query durchführen. Nun will ich allerdings eine CREATE TABLE Anweisung durchführen. Nur stürzt er dann bei rec.Open ab! Ich habe auch noch:
    hr = rec.Open(sqlQuery, CADORecordset::openTable );
    hr = rec.Open(sqlQuery, CADORecordset::openUnknown );
    hr = rec.Open(sqlQuery, CADORecordset::openStoredProc );
    versucht. Ging allerdings auch nicht.

    Noch jemand eine Idee?



  • Hallo,
    es soll normal funktionieren.
    Du musst Rechte dafür haben, eine TB zu legen.

    db->OpenEx("DSN=dsn;UID=uid;PWD=jrisch;");
    CString strSql="INSERT INTO tbl ....";

    db->ExecuteSQL(strSql);



  • Danke, habs mit Deiner Hilfe problemlos hinbekommen! 🙂



  • Ich habe nochmal ein Problem mit GetFieldValue().
    Ich habe eine DB-Tabelle mit DATETIME und will das kleinste und größte Datum herausholen. Das mach ich mit

    CADORecordset rec(&m_db);
    rec.Open("SELECT MIN(Zeitstempel), MAX(Zeitstempel) FROM daten", CADORecordset::openQuery );
    

    Diese Abfrage funktioniert und ich bekomme in der MySQL Konsole eine Tabelle mit einer Zeile und 2 Spalten zurück. Diese les ich dann in einen CString:

    CString zeitstempelMIN = "";
    CString zeitstempelMAX = "";
    rec.GetFieldValue( 0, zeitstempelMIN ); // Schreibe den Wert der Zelle in den CString
    rec.GetFieldValue( 1, zeitstempelMAX );
    

    Doch steht dann in den zeitstempeln garnichts drin, bzw. immer noch "". Wo liegt der Fehler?



  • Ok, hab das Problem gelöst und falls jemand mal das gleiche Problem hat, hier die Lösung:

    //Statt
    rec.Open("SELECT MIN(Zeitstempel), MAX(Zeitstempel) FROM daten", CADORecordset::openQuery );
    
    //Muss die Abfrage so aussehen:
    rec.Open("SELECT CAST(MIN(Zeitstempel) AS CHAR(19)), CAST(MAX(Zeitstempel) AS CHAR(19)) FROM daten;", CADORecordset::openQuery );
    

Anmelden zum Antworten