QSqlDatabase db = QSqlDatabase::database();
db.transaction();
QSqlQuery q;
for (int i=0; i<5; i++)
{
q.exec("DELETE FROM user WHERE user_id ="+ QString().setNum(i) +";");
}
q.clear();
if(!db.commit()){
db.rollback();
}
Wenn es jetzt einen Fehler gibt, sollte db.commit() != true sein und db.rollback() ausgeführt werden, was aber nicht der Fall ist. Hat jemand eine Lösung bzw. Erklärung dafür?
Transaktionen sollten unterstützt werden, da db.rollback() funktioniert, wenn ich absichtlich einen Fehler produziere und anschließend das rollback durchführe. Mir ist aber nicht klar, warum ich bei if(!db.commit()) den Wert TRUE erhalte, wenn zuvor eine oder mehrere fehlerhafte QSqlQuery's ausgeführt wurden.
Ich weis nicht, wie es bei SQLite ist, aber bei anderen Datenbanken kenn ich es so, das nach einem fehlgeschlagenen COMMIT kein ROLLBACK notwendig ist, da dies automatisch ausgeführt wird.
Also bei einem COMMIT wird nach einem Fehler nicht automatisch ein ROLLBACK durchgeführt.
Wie bereits erwähnt, das ROLLBACK funktioniert, sobald ich es nach einem Fehler per Hand ausführe.
Mir ist aber immer noch nicht klar warum nach einem Fehler in einer QSqlQuery COMMIT == TRUE ist. Wie kann ich außer mit COMMIT prüfen ob ein ROLLBACK notwendig ist?
Ich verstehe nicht warum immer COMMIT == TRUE ergibt, obwohl ein Fehler erzeugt wurde, was durch q.lastError() auch bestätigt wird. Was mache ich falsch?
Kann mit jemand sagen wie ich ein "conflict resolution algorithm" setzen kann, was das überhaupt ist und ob es ggf. bereits von Qt gesetzt wird?
Ich verstehe nicht warum immer COMMIT == TRUE ergibt, obwohl ein Fehler erzeugt wurde, was durch q.lastError() auch bestätigt wird. Was mache ich falsch?
Kann mit jemand sagen wie ich ein "conflict resolution algorithm" setzen kann, was das überhaupt ist und ob es ggf. bereits von Qt gesetzt wird?
Hallo,
habe zurzeit das gleiche Problem und wollte mal fragen, ob du diesbezüglich weiter gekommen bist?