Hallo,
ich komme Gedanklich bei meinen Überlegungen zu dem o.g. Thema nicht ganz hin :
Wenn ich alle Daten aus einer MS Access-Datenbank in ein DataSet reinschreibe (Visual Basic .NET) und in einer Tabelle eine Zeile hinzufüge, wie wird dann der Primary Key ermittelt ?
Angenommen in der mdb hat der letzte Eintrag die ID 61, und wird gelöscht. Somit ist die letzte ID die 60. Das Problem ist das bei einem neuen Eintrag die ID 61 nicht benutzt werden kann da dies von MSa verweigert wird.
Was mache ich nun, bzw. wie löst VB diese Problem.
Eigentlich müsste ja immer wenn der DataAdapter ein Update in die Datenbank schreibt die neue IDs geladen werden, da die vor einem Update nicht bekannt sind.
Hoffentlich versteht mich jemand und kann mir helfen das Rätsel zu enträtseln.
schonmal danke füe euere Bemühungen bisher.
MfG Hanussen
Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge
Wenn Du die Update methode des DataAdapters ausführst wird die boolsche variable "HasChanges" getestet. Falls diese "True" ist werden mittels "SelectCommand", "UpdateCommand" und "InsertCommand" alle Änderungen mit der Datenquelle (der DataCommand) synchronisiert.
Das Problem das Du beschreibst hab ich jetzt verstanden - leider hast Du Recht. Es ist nur auf äußerst komplizierte Weise möglich den Primary Key nach einem Insert sofort zurück zu erhalten. Es gibt jedoch eine diletantische, nicht fehlerfreie Alternative dieses Problem zu beheben. Du führst einfach nach einem INSERT noch einen SELECT Befehl aus, bei dem der Maximalwert der vorhandenen Primary Keys zurückgegeben wird. Dieser Wert ist dann der Primary Key. Also z.B.:
SELECT MAX(ID) FROM Tabelle;
Das Problem bei dieser Methode ist jedoch das sie nicht funktioniert wenn es viele gleichzeitige oder kurz aufeinander folgende Inserts gibt. Auch bereitet die Methode Probleme, da sie nicht mit Typed Datasets funktioniert!!
Hoffe ich habe Dein Problem halbwegs verstanden und diese Antwort lichtet das Dunkel ein wenig :-)