Seite 1 von 1

[solved] Transaktionen und QSqlTableModels

Verfasst: 31. März 2008 17:05
von abelmi
Hallo,
wie es scheint, arbeiten QSqlTableModel nicht zusammen mit Transaktionen.

Folgender Code führt nicht zu dem zu erwartenden Ergebnis. Vor einem submitAll() rufe ich an der QSqlDatabase ein transaction() auf. Gleich danach rufe ich ein rollback() auf. Jegliche Änderungen sollten durch das rollback rückgängig gemacht werden. Dies ist aber nicht der Fall. In der Datenbank steht nach dem rollback der Text "dies ist ein Test" in der ersten Zeile in Spalte 1 der Tabelle "Test".

Code: Alles auswählen

QSqlTableModel * model = new QSqlTableModel("tabelle");
model->select();
model->setData( model->index( 0, 0 ), "dies ist ein Test" );
...

// ***** hier der interessante Teil *****

model->database().transaction();
model->submitAll();
model->database().rollback();

// *******************************
...
Ich verwende Qt 4.3.1 und Oracle 10g.

Testen könnt ihr das, wenn ihr wollt, ganz einfach. Ändert einfach das example von Qt unter $(QTDIR)\examples\sql\cachedtable ab. Einfach in der Datei tableeditor.cpp folgende Zeilen

Code: Alles auswählen

void TableEditor::submit()
{
    model->database().transaction();
    if (model->submitAll()) {
        model->database().commit();
    } else {
        model->database().rollback();
        QMessageBox::warning(this, tr("Cached Table"),
                             tr("The database reported an error: %1")
                             .arg(model->lastError().text()));
    }
}
durch

Code: Alles auswählen

void TableEditor::submit()
{
    model->database().transaction();
    model->submitAll();
    model->database().rollback();
}
ersetzen und in der Datei ..\connection.h die Verbindung von SQLite auf Oracle abändern.

Habt ihr ähnliche Erfahrungen wie ich zu diesem Thema? Oder habt ihr irgendwelche Ideen was ich bezüglich des Problemes machen kann?

MfG abelmi

Verfasst: 31. März 2008 19:00
von upsala
Was sagt eigentlich das Datenbank-Logfile dazu?

Verfasst: 8. April 2008 11:00
von abelmi
nach einigen Anstrengungen und Kontakt mit Trolltech konnte ich jetzt den Fehler identifizieren und dank eines Patches vom Trolltech Support den Fehler beseitigen.

Das qsqloci Plugin hat den Status der Transaktion nicht richtig gelesen.
Ich denke, dass in der nächsten Qt Version dieser Fehler beseitigt sein wird.