Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [MySQL]Nächster auto_increment Wert? (https://www.delphipraxis.net/66927-%5Bmysql%5Dnaechster-auto_increment-wert.html)

Aenogym 6. Apr 2006 15:28

Datenbank: MySQL • Version: 5 • Zugriff über: Zeos

[MySQL]Nächster auto_increment Wert?
 
hi leute,

ich habe hier in meiner tabelle eine spalte als auto_increment definiert.
wie kann ich herausfinden, welchen auto_increment-wert die nächste zeile bekommt, die ich einfüge?

MAX(autoinc_feld)+1 hilft mir nicht wirklich weiter, da in meiner tabelle auch lücken durch DELETEs entstehen können, die nicht vom auto_increment berücksichtigt werden.

vielen dank im voraus,
euer aeno :)

Igotcha 6. Apr 2006 15:31

Re: [MySQL]Nächster auto_increment Wert?
 
Delphi-Quellcode:
ZQuery1.SQL.Text:='SELECT LAST_INSERT_ID()';
führst Du aus, nachdem Du einen Datensatz eingefügt hast. Der zurückgelieferte Wert ist connection-abhängig, so dass Du auch tatsächlich Deinen Wert zurückbekommst, nicht den von evtl. anderen Usern zwischenzeitlich hinzugefügten.

Gruß Igotcha

Chewie 6. Apr 2006 15:34

Re: [MySQL]Nächster auto_increment Wert?
 
Den nächsten kannst du nicht herausfinden, nur den letzten (wie das geht, hat Igotcha oben geschrieben).

Aenogym 7. Apr 2006 07:20

Re: [MySQL]Nächster auto_increment Wert?
 
hi ihr beiden,

danke für die antworten. doch leider haben die mir nicht wirklich helfen können. LAST_INSERT_ID() wäre zu umständlich, da ich das resultat noch extra irgendwo speichern müsste, um es zu einem späteren programmstart wieder zu verwenden.

aber ich habe herausgefunden, dass der wert, den ich suche, in information_schema.tables liegt. dort sind informationen für jede tabelle gespeichert. unter anderem auch, welcher auto_inc wert als nächstes benutzt wird :)

aeno

Jelly 7. Apr 2006 07:29

Re: [MySQL]Nächster auto_increment Wert?
 
Wie fügst Du denn die Daten ein... Direkt via SQL oder mittels append und Post vom Dataset... Beachte, dass erst beim Posten der Datensatz an den MySQL Server geht, und erst dann die ID vergeben wird.

Chewie 7. Apr 2006 10:36

Re: [MySQL]Nächster auto_increment Wert?
 
Ich hoffe, du arbeitest mit Transaktionen? Denn wenn nicht kannst du nicht davon ausgehen, dass der Wert, der im Informationsschema als nächster Auto-Increment-Wert hinterlegt ist auch wirklich der Wert ist, den dein nächster Datensatz bekommt.

Igotcha 7. Apr 2006 10:58

Re: [MySQL]Nächster auto_increment Wert?
 
Zitat:

Zitat von Aenogym
danke für die antworten. doch leider haben die mir nicht wirklich helfen können. LAST_INSERT_ID() wäre zu umständlich, da ich das resultat noch extra irgendwo speichern müsste, um es zu einem späteren programmstart wieder zu verwenden.

Wie jetzt :gruebel:

Du fügst irgendwie einen Datensatz in die DB. Beim Ausführen erhält dieser neue Datensatz automatisch den AutoInc-Wert in der Tabelle. Anders geht das erstmal schon gar nicht.

Und was willst Du jetzt mit dem AutoInc-Wert machen? Das hast Du ja noch nicht verraten.

Mir fallen 2 Möglichkeiten ein:

1. der Wert dient z.B. in einer Rechnungsnummer. Dann fragst Du den Wert so ab, wie ich oben beschrieben habe und gibts ihn dann z.B. in dem Rechnungseingabeformular aus
2. du fügst danach Werte in eine andere Tabelle ein, die einen Bezug zu der ID des ersten Datensatzes haben sollen - dann machst Du das genauso ;-)

Gruß Igotcha

mkinzler 7. Apr 2006 11:15

Re: [MySQL]Nächster auto_increment Wert?
 
Die neueste Version von Zeos unterstützt sequences, die genau für das da sind. Hierüber kannst du den letzten vergebenen Wert der Sequenz, sowie den nächsten zu vergebenen Wert abfragen. Ich arbeite nicht mit mysql und weiß daher nicht, ob es hiermit funktioniert.
Allerdings ist es unerheblich ob man den nächsten wert kennt oder nur den letzten vergebenen, da der zweitere bei mysql m.W. immer um 1 größer ist.

Aenogym 7. Apr 2006 11:29

Re: [MySQL]Nächster auto_increment Wert?
 
hi,

also ich beschreib mal meine situation:

in meiner tabelle für ich zeilen ein, die währungen und ihre wechselkurse darstellen. struktur:
SQL-Code:
  `id` int(11) NOT NULL auto_increment,
  `sign` varchar(10) NOT NULL,
  `rate` decimal(10,4) NOT NULL default '1.0000',
  PRIMARY KEY (`id`)
das einfügen der zeilen geschieht direkt via SQL-query.
der benutzer kann, wenn er möchte, eine währung löschen. dadurch entsteht ja quasi eine lücke in der id-spalte (zB. 1, 2, 3, 5). wenn er jetzt wieder eine neue währung hinzufügen möchte, dann erscheint mein formular, dass ihm schon anzeigt, welche ID die einzufügende währung bekommen wird.
wenn der benutzer das währungssymbol und den wechselkurs eingegeben hat, wird die zeile einfach eingefügt.
und nein, ich nutze keine transaktion dafür.

zur not könnte ich auf die anzeige der nächsten ID verzichten. das würde mir aber an anderer stelle etwas mehr arbeit machen. meint ihr, das wäre besser?

aenogym

sECuRE 7. Apr 2006 12:29

Re: [MySQL]Nächster auto_increment Wert?
 
Hi,

den momentanen Status der auto_increment-variable bekommst du so:
Code:
                $result = mysql_query("SHOW TABLE STATUS LIKE '".$tableName."'");
                if (!$result)
                        die("Error querying: ".mysql_error());
                $row = mysql_fetch_assoc($result);
                if (!$row)
                        die("Error: ".mysql_error());

                mysql_free_result($result);

                echo "Dein Wert: ".$row['Auto_increment'];
cu


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz