QSqlDatabase und autoincrement

Alles rund um die Programmierung mit Qt
Antworten
Hans
Beiträge: 9
Registriert: 26. Februar 2005 18:26
Kontaktdaten:

QSqlDatabase und autoincrement

Beitrag von Hans »

Hallo,

ich greife mittels QSqlDatabase auf eine (MySql) Datenbank zu, in der einige Tabellen einen Autoincrement Wert haben. Ich würde nun gerne den Autoincrementwert eines INSERT zurückbekommen.
Über das MySql C Interface währe das die Funktion mysql_insert_id(). Die entsprechende QT Funktion hat sich bisher erfolgreich vor mir versteckt.

Gruß,
Hans
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Die Lösung ist:
Es gibt keine.
Hans
Beiträge: 9
Registriert: 26. Februar 2005 18:26
Kontaktdaten:

Beitrag von Hans »

FlorianBecker hat geschrieben:Es gibt keine.
Schade. Keine ist etwas sehr wenig. Gibt es Erfahrungswerte, wie zuverlässig die SQL Funktion LAST_INSERT_ID() unter Last ist?
Kann ich den gerade erstellten Datensatz über andere Wege bekommen, evtl. über Cursor? Da ließe sich die uid ja dann auch auslesen.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Also da bei meinen Datensätzen das meiste mit timestamp hinterlegt ist nehm ich den mit ein oder zwei weiteren werten und mache einfach SELECT id WHERE timestamp=? AND wert2=? AND wert3=?

Die SQL Treiber von Qt sind meiner Meinung nach eh noch nicht so gut. Die 4er habe ich zwar noch nicht ausprobiert, aber wenn die genauso sind, werde ich wohl auf eine direkte Lösung umsteigen.
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Beitrag von nando »

Hi,

soweit ich weiss ist dieser aufruf "lastinserted_id" .. fuer die aktuelle connection sicher.
schau auch mal nach "transistion level" in der doku.
zu beachten ist auch der tabellen typ... barkeydb oder myisam...
bezueglich transaktionen...

ansonsten kannst du auch mit mysql einen lock auf eine tabelle machen... dann den insert, dann die groesste id lesen und dann den lock wieder aufheben..
dieser lock ist dann verbindungsuebergreifend... also aufpassen...!!


mehr dazu auch unter transaktionen / transition level / lock

so hat es bei mir mit mysql gut funktioniert...

gruss,
nando
Hans
Beiträge: 9
Registriert: 26. Februar 2005 18:26
Kontaktdaten:

Beitrag von Hans »

Ah ja, hier stehts ja:
The last ID that was generated is maintained in the server on a per-connection basis. This means the value the function returns to a given client is the most recent AUTO_INCREMENT value generated by that client. The value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that you can retrieve your own ID without concern for the activity of other clients, and without the need for locks or transactions.
Ich war wieder zu blind um selbst zu lesen.

Danke,
Hans
Antworten