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.935 Themen, 20.621 Beiträge
Hallo!
nun, die Zuweisung eines Primary Keys ist abhängig von dessen Datentyp. Hast Du einen anderen Datentyp als AutoWert (=AutoNumber) so kannst Du bei INSERT SQL Befehlen den Key selbst angeben. Ist der Datentyp des Keys "AutoWert", so ist eine Zuweisung nicht möglich. Dies liegt an der Charakteristik des Datentyps selbst. Access führt in diesem Fall für die jeweilige Tabelle einen impliziten Index. Hast Du also eine ID 61 und löschst diese (DELETE FROM .. WHERE ID=61;") und fügst Du danach eine neue Zeile hinzu, so erhält diese Zeile die ID 62, auch wenn 61 theoretisch frei wäre.
Bei ADO.NET gilt daher folgendes:
für den jeweiligen DataAdapter enthält der "InsertCommand" Parameter den SQL INSERT Befehl ohne Verweis auf den Primary Key. Falls Du Dir die InsertCommand mit Parametern selbst geschrieben hast (=untyped DataSet) so musst Du die "InserCommand" ändern.
Hoffe das hilft Dir ein wenig weiter...