Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

LAST INCERT ID funktioniert nicht!

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

⏪ vorheriges - nächstes ⏩

asiat


asiat

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 ?

DF6GL

Hallo,


was soll "LAST INCERT ID() "  sein?

Wozu brauchst Du die ID?


WIE importierst Du?

asiat

'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.

DF6GL

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")
.
.

asiat

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.


Josef P.

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


Josef P.

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

MzKlMu

Gruß Klaus

oma

Hallo,

es gibt sogar Newbie's, die Live-Meetings zu Access organisieren ;) ;D
Was wird nur aus uns Alten?

Gruß Oma
nichts ist fertig!

DF6GL

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.



oma

nichts ist fertig!

database

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


Josef P.

#14
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