Database update statement



  • Hallo Zusammen,

    ich habe eine applikation bei denen ich einen Access Datenbank verwende.
    Die Daten in der Tabelle zu schreiben hat einwandfrei funktioniert.
    bei Update Statement habe ich einen Problem.
    Ich weiss es nicht was ich falsch mache.

    Anbei einen Codeabschnitt wie der Update Statment aussieht:

    void DatabaseManager:: updateCalibrationMeasureData( const AClass &result)
    {
    QSqlQuery query;
    query.prepare("UPDATE tblCCWEncoder SET IsCalibrated=:iskalibriert, DCA=:dca, DCB=:dcb, T1=:t1, T2=:t2, "
    "T3=:t3, T4=:t4, PWZ=:pwz, Phase=:phase, Direction=:direction, "
    "Current=:current, Volatge=:voltage, Speed=:speed, PE=:pE, WE=:wE, A0=:a0, "
    "A1=:a1, A2=:a2, A3=:a3, A4=:a4, A5=:a5, "
     "A6=:a6, A7=:a7, Datum=:datum, Uhrzeit=:uhrzeit WEHRE SerialNrIDRef = '" + getEncoderName() + "'");
    
    query.bindValue(":iskalibriert", true);
    query.bindValue(":dca", result.strfuGetDCA());
    query.bindValue(":dcb", result.strfuGetDCB());
    query.bindValue(":t1", result.strfuGetT1());
    query.bindValue(":t2", result.strfuGetT2());
    query.bindValue(":t3", result.strfuGetT3());
    query.bindValue(":t4", result.strfuGetT4());
    query.bindValue(":pwz", result.strfuGetPWZ());
    query.bindValue(":phase", result.strfuGetPhaseAB());
    query.bindValue(":direction", result.strfuGetDirection());
    query.bindValue(":current", result.strfuGetI());
    query.bindValue(":voltage", result.strfuGetU());
    query.bindValue(":speed", result.strfuGetSpeed());
    query.bindValue(":pE", result.strfuGetPosError());
    query.bindValue(":wE", result.strfuGetWidthError());
    query.bindValue(":a0", result.strfuGetAsicA0());
    query.bindValue(":a1", result.strfuGetAsicA1());
    query.bindValue(":a2", result.strfuGetAsicA2());
    query.bindValue(":a3", result.strfuGetAsicA3());
    query.bindValue(":a4", result.strfuGetAsicA4());
    query.bindValue(":a5", result.strfuGetAsicA5());
    query.bindValue(":a6", result.strfuGetAsicA6());
    query.bindValue(":a7", result.strfuGetAsicA7());
    query.bindValue(":datum", getCurrentDate());
    query.bindValue(":uhrzeit", QTime::currentTime());
    	
    query.exec();
    
    if(!query.isActive())
    {
          throw(QString("DataBase Error: updateCCW_CalibrationMeasuredata"));
    }
    
    }
    

  • Moderators

    @Galilio Is WEHRE a typo in your query ?
    Also you can get more info using lastError.



  • Danke
    Mit dem "WEHRE" hast du Recht. Es muss zu "WHERE" korrigiert werden.
    LastError ist eine grosse Hilfe .
    Danke


  • Moderators

    @Galilio Great!. Bitte :)



  • Hi Danke
    ich bekomme aber immer diese Fehlermeldung"lastError":

    [Microsoft][ODBC-Treiber für Microsoft Access] 27 Parameter wurden erwartet,
    aber es wurden zu wenig Parameter übergeben. QODBC3: Unable to execute statement

    Ich weiss es nicht welche Parameter fehlt.
    Sieht es überhaupt einen Update statement so aus "Wie oben "

    danke


  • Moderators

    @Galilio Yes the update statement works in that way. AFAIK it is not compulsory to update all columns when using update query. Does your table contain 27 columns ?



  • The table contains 28 columns


  • Moderators

    @Galilio Something strange. The table contains 28 columns, the error shows 27 are expected and you are actually updating 25 which is fine. Are you sure you are looking for correct table ?
    Also can you try updating just 1 column ?



  • Wie kann ich den query lesen bevor exec()
    z.B:

    QSqlQuery query;
    query.prepare("........");
    query.bindvalue(.....);
    ....
    //und genau hier bevor es "query.exec();" durchgeführt wird, der Inhalt von query lesen.
    query.exec();
    

    Danke


  • Moderators

    @Galilio
    NACH dem exec() aufruf kannst du QSqlQuery::executedQuery() verwenden
    Oder siehe hier.



  • danke

    Das Problem lag an einem dumme Tippfehler.

    danke noch mal



  • @Galilio Setze bitte den Thread auf "Solved".

    Viele Grüße
    Jörg



  • Wie kann ich den Thread als Solved setzen?


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.