[solved] Transaktionen und QSqlTableModels

Alles rund um die Programmierung mit Qt
Antworten
abelmi
Beiträge: 16
Registriert: 19. Februar 2007 14:56

[solved] Transaktionen und QSqlTableModels

Beitrag 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
Zuletzt geändert von abelmi am 8. April 2008 11:01, insgesamt 1-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Was sagt eigentlich das Datenbank-Logfile dazu?
abelmi
Beiträge: 16
Registriert: 19. Februar 2007 14:56

Beitrag 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.
Antworten