Seite 1 von 1

Geschachtelte Transaktionen SQL

Verfasst: 17. November 2009 14:59
von bob446
Hallo,
ich habe folgendes Problem:

Ich möchte einen Datensatz einfügen und dessen ID in einer anderen Tabelle als Fremdschlüssel verwenden. Ich verwende eine Transaktion um bei auftretenden Fehler meinen Eintrag wieder zu verwerfen.
Solange ich allerdings nicht commite kann ich nicht die Id des neuen Datensatzes abrufen via SELECT(ID) FROM MYTABLE
Eine zweite Transaktion kann ich zwar beginnen, aber das commit beendet anscheinend auch die Haupttransaktion:

Code: Alles auswählen

m_qSqlDatabase.transaction();
--nun folgt das Insert
m_qSqlDatabase.transaction();
--Abfrage ID
m_qSqlDatabase.commit();
Vllt hat jemand schonmal ein ähnliches Problem gehabt und kennt eine Lösung?Vielen Dank schonmal ;)

Verfasst: 17. November 2009 15:59
von upsala
Welche Datenbank wird angesprochen und unterstützte diese auch geschachtelte Transaktionen?

Verfasst: 17. November 2009 17:29
von bob446
Es handelt sich um eine Access Datenbank und diese sollte bis zu 5 geschachtelte Transaktionen unterstützen. Ist meine Idee mit der geschachtelten Transaktion überhaupt sinnvoll?

Verfasst: 17. November 2009 20:05
von upsala
Du machst ein Insert und kannst in der selben Transaktion diesen Datensatz nicht mehr abrufen?!?

Qt hat keine Access-SQL-Schnittstelle. Schau dir mal die Doku zu deiner Datenbank an, ob diese verschachtelte Transaktionen überhaupt über die Schnittstelle, die du verwendest unterstützt.

Verfasst: 18. November 2009 08:50
von AuE
denke mal er wird QODBC nehmen?

Verfasst: 18. November 2009 09:05
von upsala
Vielleicht. Meine Glaskugel ist defekt...

Verfasst: 18. November 2009 09:15
von AuE
;-) Ich hab da immernoch ne Ersatzkugel liegen - für den Fall der Fälle :D

Verfasst: 18. November 2009 09:58
von bob446
ich will mal auflösen, eher noch mehr Glaskugeln kaputt gehen^^...ich verwende QODBC...also sollte die Schnittstelle das eigentlich unterstützen!?
Löst eine geschachtelte Transaktion überhaupt mein Problem mit den neu eingefügten IDs? Bzw hat jemand eine Idee wie man das lösen könnte?
Vielen Dank für die Hilfe :)

Verfasst: 18. November 2009 10:28
von AuE
Mit Transactionen kenn ich mich nicht wirklich aus. Aber warum überhaupt transaction-wenns schief geht steht ja eh nix drin ;-)

Via SqlQuery kannst du lastInsertedID() *OOM* abfragen und das dann wiederum einfügen in die 2 Tabellen.

Gruß

Verfasst: 18. November 2009 16:00
von upsala
Sollte? Ist das die konkrete Aussage aus der Doku von Access?

Ob Access lastInsertId() unterstützt, kann man über den QSqlDriver abfragen.

Außerdem: Datensätze die innerhalb einer Transaktion einfügt werden, können auch innerhalb derselben Transaktion ausgelesen werden (inkl. AutoIncrement oder ähnlichen Werten).