Geschachtelte Transaktionen SQL

Alles rund um die Programmierung mit Qt
Antworten
bob446
Beiträge: 35
Registriert: 15. August 2009 11:28

Geschachtelte Transaktionen SQL

Beitrag 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 ;)
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Welche Datenbank wird angesprochen und unterstützte diese auch geschachtelte Transaktionen?
bob446
Beiträge: 35
Registriert: 15. August 2009 11:28

Beitrag 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?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

denke mal er wird QODBC nehmen?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Vielleicht. Meine Glaskugel ist defekt...
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

;-) Ich hab da immernoch ne Ersatzkugel liegen - für den Fall der Fälle :D
bob446
Beiträge: 35
Registriert: 15. August 2009 11:28

Beitrag 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 :)
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag 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ß
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

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