Hallo
Ups, habe zuffällig enter gedrückt.
sql abfrage "SELECT LAST INCERT ID() FROM tbl_Kontakt" funktioniert in access 2007 nicht
gibt es eine lösung die mir ID einen gerade importierten Datensatz zurückliefert ?
Hallo,
was soll "LAST INCERT ID() " sein?
Wozu brauchst Du die ID?
WIE importierst Du?
'DATENSATZ EINFUEGEN
Dim strsql As String
DoCmd.SetWarnings False
strsql = "INSERT INTO tbl_Kontakt (Nachname)" & _
" VALUES ('" & Me.Nachname & "')"
DoCmd.RunSQL strsql
DoCmd.SetWarnings True
ID Auto Wert wird erstellt, und das möchte ich zurückgeben.
Hallo,
Du beantwortest meine Frage nicht..
Es ist problematisch, den richtigen ID-Wert authentisch auszulesen.
Dim lngID as Long
lngID=Dlookup("ID","tbl_Kontakt","Nachname='" & Me!Nachname & "'")
oder bei inkrementellen PK:
.
.
DoCmd.RunSQL strsql
lngID=DMax("ID","tbl_Kontakt")
.
.
Wenn man einen Datensatz einfügt wird automatisch eine ID Nr. erstellt und der letzer Wert ist natürlich auch der größte von daher
SELECT max(ID) FROM tbl:Kontakt; tut es auch.
Hallo!
Falls direkt nach dem Anfügen gefragt werden soll:
select @IDENTITY as LetzterIdWertAusAllenTabellen
Dabei ist zu beachten, dass man bei dieser Anweisung nur den letzten Autowert der Sitzung - aber nicht den letzten Autowert von einer bestimmten Tabelle abfragen kann.
Prinzip (Luftcode!):
strsql = "INSERT INTO tbl_Kontakt (Nachname)" & _
" VALUES ('" & Me.Nachname & "')"
CurrentDb.execute strsql, dbfailonerror
letzterAutowert = CurrentDb.OpenRecordset("select @IDENTITY").Fields(0).Value
Vorteil dieser Variante gegenüber DMax: sie liefert auch in einer Mehrbenutzerumgebung den zuletzt aus dem aktuellen FE erstellen Autowert und nicht den zuletzt erstellen Autowert aller Benutzer.
mfg
Josef
Hallo Josef,
kennt denn Jet-SQL "@IDENTITY" ?
Hallo!
@IDENTITY kennt es nicht aber @@IDENTITY.
(Vielleicht sollte ich doch hin und wieder Code kopieren oder ausprobieren und nicht einfach so in den Beitrag schreiben. :D)
mfg
Josef
OT:
Josef P. als Newbie, genial. ;D ;D
Hallo,
es gibt sogar Newbie's, die Live-Meetings zu Access organisieren ;) ;D
Was wird nur aus uns Alten?
Gruß Oma
Hallo,
wirste alt wie 'ne Kuh, mußte lerne immerzu... ;D
Mich hat überrascht ,dass es "@@Identity" überhaupt in Access geht, wobei der graf. Abfrageentwurf(!) davon nix wissen will , die SQL-Ansicht aber wenigstens nicht meckert.
Trotzdem ist das Ding wegen seiner Restriktionen "schwierig" zu behandeln.
Hallo Franz,
ab Jet 4.0; siehe auch: http://support.microsoft.com/kb/232144/de (http://support.microsoft.com/kb/232144/de)
Gruß Oma
Hallo zusammen,
ich darf mich noch mit einer Wortmeldung anhängen ...
dass es @@Identity für die Jet 4.0 gibt war mir zwar bekannt, in einer Mehrbenutzerumgebung hätte ich die Funktionalität noch nicht einsetzen wollen.
Entgegen der Meinung von Josef sehe ich da den Vorteil nicht - vielleicht habe ich da auch die Scheuklappen zu groß gewählt - ich sehe da viel mehr eine Fehlerquelle.
Wann benötigt man den zuletzt erzeugten ID Wert der durch das aktuelle FE erzeugt wurde?
Also ich habe den Bedarf in meiner gesamten - doch schon einige Jahre andauernden - Tätigkeit noch nie gehabt, sehr wohl aber Bedarf den letzten Autowert der Tabelle zu ermitteln.
Und den mit der DMax - Funktion eben
LG
Hallo!
Zitatich sehe da viel mehr eine Fehlerquelle.
Welche Fehlerquelle siehst du dabei?
Zitatsehr wohl aber Bedarf den letzten Autowert der Tabelle zu ermitteln
Diesen Bedarf hatte ich bisher noch nie. :)
Normalerweise benötige ich den zuletzt eingefügten Autowert eigentlich nur, wenn ich einen Datensatz einfüge und direkt danach von genau diesem Datensatz den Autowert haben möchte. DMax oder eine Max(..)-SQL-Anweisung wäre in diesem Fall in einer Mehrbenutzerumgebung ein Murks - zumindest ist es Glückssache den Wert des zuletzt vom FE aus eingefügten Datensatzes zu erhalten, da in der Zwischenzeit auch ein anderer User einen Datensatz eingefügt haben könnte. Es bleibt meiner Ansicht nach nur @@Identity übrig oder man verwendet überhaupt ein Recordset zum Anfügen des einen Datensatzes - solange man Autowerte und keine GUID verwenden will.
mfg
Josef
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
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
Hallo zusammen,
danke für die Infos..