Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

LAST INCERT ID funktioniert nicht!

Begonnen von asiat, Januar 11, 2011, 17:42:49

⏪ vorheriges - nächstes ⏩

database

Hallo Josef,

als Fehlerquelle sehe ich die Möglichkeit, eben einen Wert geliefert zu bekommen der nicht dem tatsächlich höchsten ID-Wert in einer Tabelle entspricht.

Zitatda in der Zwischenzeit auch ein anderer User einen Datensatz eingefügt haben könnte
...eben genau das habe ich dabei auch berücksichtigt -  egal wie auch immer - diesen letzten Wert der Tabelle habe ich des Öfteren benötigt und eben dazu war festgestellter Weise @@Identity nicht geeignet bzw. hätte für MICH einen Wert geliefert, den ich nicht verwenden hätte können / sollen.

ZitatDiesen Bedarf hatte ich bisher noch nie.
...wäre ja auch fad, wenn jeder das Gleiche machen würde  ;) - dann könnt' es ja gleich einer alleine tun   :D ;D

Josef P.

#16
Hallo!

Zitatals Fehlerquelle sehe ich die Möglichkeit, eben einen Wert geliefert zu bekommen der nicht dem tatsächlich höchsten ID-Wert in einer Tabelle entspricht.
Wenn der höchste aktuell vorhandene ID-Wert abgefragt werden soll, ist @@Identity keine Fehlerquelle sondern das falsche Instrument. :)

Ich war der Meinung, es geht um den zuletzt eingefügten Autowert der aktuellen Session.

Als Beispiel (nur Prinzip-Code):
Zitatcurrentdb.execute "insert into Bestellungen (..., ..., ...) ...", dbfailonerror
NeueBestellId = Currentdb.OpenRecordset("select @@Identity")

currentdb.execute "insert into BestellPositionen (fiBestellung, ..., ...) Select " & NeueBestellId & ", ... from ... ", dbfailonerror

Für dieses Szenarion ist @@Identity besser geeignet als eine Max(..)-Auswertung, da die Max-Auswertung falsche Werte liefern könnte.
Wenn es aber darum geht, an beliebiger Stelle - ohne direkten Bezug zur letzten Insert-Anweisung o. ä. den Max-Wert zu erhalten ist natürlich @@Identity nicht geeignet - dann muss man Max nutzen, was allerdings meiner Ansicht nach nichts mehr mit "zuletzt eingefügten Autowert" zu tun hat. Dieser Bezug entsteht nur indirekt, wenn man definiert, dass der zuletzt eingefügt Wert dem höchste Wert entspricht. (Das muss aber nicht unbedingt der Fall sein. Man muss dann für die Anwendung zumindest sicherstellen, dass keine DS inkl. Wert für das Autowertfeld eingefügt werden und dadurch die automatische Autowert-Vergabe ausgehebelt wird.)

mfg
Josef