Eigenwert der zuletzt eingefügten Zeile - MS Access / VBA
Ich habe eine JET-Tabelle mit einer auto-Nummer als Primärschlüssel, und ich würde gerne wissen, wie ich abrufen kann, diese Nummer wird nach dem einfügen einer Zeile. Ich habe daran gedacht, mit MAX() zum abrufen der Zeile mit dem höchsten Wert, bin aber nicht sicher, wie zuverlässig dieses sein würde. Einige Beispiel-code:
Dim query As String
Dim newRow As Integer
query = "INSERT INTO InvoiceNumbers (date) VALUES (" & NOW() & ");"
newRow = CurrentDb.Execute(query)
Nun weiß ich, dass dies nicht funktionieren würde, da Execute()
nicht den Rückgabewert der Primärschlüssel, aber das ist im Grunde die Art von code, ich bin auf der Suche nach. Ich muss den Primärschlüssel der neuen Zeile aktualisieren einer Anzahl von Zeilen in einer anderen Tabelle.
Was wäre die einfachste /besten lesbaren Art und Weise, dies zu tun?
InformationsquelleAutor der Frage a_m0d | 2009-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie DAO verwenden,
Wenn Sie ADO, verwenden
cn wird eine gültige ADO-Verbindung
@@Identity
zurück, die letztenIdentity
(AutoWert) eingefügt, die auf dieser Verbindung.Beachten Sie, dass
@@Identity
könnte problematisch sein, weil der zuletzt generierte Wert kann nicht die sein, die Sie interessiert sind in. Für die Access-Datenbank-engine, betrachten einVIEW
zwischen zwei Tabellen, beide haben dieIDENTITY
Eigenschaft, und SieINSERT INTO
dieVIEW
. Für SQL Server, überlegen Sie, ob es gibt Trigger, die wiederum einfügen von Datensätzen in eine andere Tabelle, das hat auch dieIDENTITY
Eigenschaft.BTW DMax nicht funktionieren würde, als ob jemand anderes fügt einen Datensatz nur, nachdem Sie eingefügt haben eine Platte aufnehmen, aber bevor Ihr die Dmax-Funktion beendet excecuting, dann hätte man Ihren Eintrag.
InformationsquelleAutor der Antwort Tony Toews
In deinem Beispiel, denn Sie verwenden CurrentDB ausführen der INSERT-Sie haben es schwerer für dich. Stattdessen wird diese Arbeit:
Ich verwendet, um zu tun, ergänzt durch die Eröffnung eines AddOnly recordset und Kommissionierung bis die ID aus, aber dies ist viel effizienter. Und beachten Sie, Tony, dass es nicht erforderlich ist ADO.
InformationsquelleAutor der Antwort David-W-Fenton
Dies ist eine Anpassung von meinem code für Sie. Ich war inspiriert von developpez.com (Schauen Sie in die Seite : "Pour insérer des données, vaut-il mieux passer par un RecordSet ou par une requête de Typ EINFÜGEN ?"). Erklären Sie (mit ein wenig Französisch). Dieser Weg ist wesentlich schneller als die oberen. In dem Beispiel, auf diese Weise wurde 37 mal schneller. Versuchen Sie es.
LeCygne
InformationsquelleAutor der Antwort LeCygne
InformationsquelleAutor der Antwort Derek Ebrey