ID beim Anlegen vergeben

mille81

Benutzer
Beiträge
18
Hallo zusammen,

ich habe ein Access Frontend mit MS SQL Backend. habe folgendes Problem:
Wenn ich einen neuen Datensatz anlege erzeugt er im Feld B_ID (welches der Primary Key ist) erst nach Verlassen des Datensatzes eine neue ID und nicht direkt beim Anlegen.
(Timestamp Feld ist auch vorhanden. Access kann aber scheinbar nicht drauf zugreifen, bzw. das Feld wird auch erst nach verlassen des ds gefüllt.)

Ich habe mehrere Funktionen die die ID direkt beim Anlegen benötigen.
Kann man das irgendwie einstellen?
 
Zuletzt bearbeitet:
Werbung:
Also unter MSSQL würde man einen UNIQUEIDENTIFIER mit newid() anlegen. Von welchem Datentyp deine ID sein soll hast du nicht geschrieben und das ist auch eher eine Sache von Access. Vieleicht läßt sich dort irgendwo newid() als Standardwert einstellen? Ich kann mir auch nicht vorstellen, das Access die Daten ohne ID in die Datenbank schreibt, vermutlich ist dein ganzer Datensatz noch nicht angelegt.
 
Ich möchte die ID automatisch vergeben.
Datentyp int
Primayr Key
Identitätsspezifikation: Ja
(Ist Identity) Ja
ID-Ausgangswert 1
ID_Inkrement 1

NIQUEIDENTIFIER kennt access als datentyp nicht....
 
Auch den UNIQUEIDENTIFIER legt er bei mir/in Access scheinbar erst nach verlassen des DS an...

Ich migriere gerade eine vorhandene DB von Access zu MS SQL
Das Problem ist, dass ich den Datentyp int (oder in Access ist es Long) schon in allen Tabellen als ID gesetzt habe. D.h. es bestehen schon Einträge die untereinander verknüpft sind. Ich kann etzt also nicht mal eben die ID´s ändern...
 
Zuletzt bearbeitet:
Ließe sich schon ändern aber macht natürlich nur Sinn wenn dein Problem dann nicht mehr besteht. Leider habe ich mit Access nur wenig Erfahrung, nutze das nur als Export Format und importiere daraus. Teste am besten mal anhand einer Tabelle ob das Problem mit UID ebenfalls besteht, wenn nicht, helfe ich dir beim Umstellen das ist ja alles normales SQL :)
 
Also ich lege meinen Datensatz über VBA neu an:
dat.AddNew
dat!ID_VA = Me!ID_VA
etc.
Ich kann aber solange ich den Erfassungsvorgang nicht beendet habe, nicht auf die UID zugreifen.
In Access ist es so, wenn ich einen Wert in die Zeile schreibe erzeugt er SOFORT die ID und ich kann Sie nutzen.

Was man machen könnte, ist die UID selber über eine Funktion erzeugen und dann in das UID Feld schreiben (dazu dann den Standardwert rausnehmen).
Das zieht dann aber nach sich, dass ich in allen verknüpften Tabellen (und das sind nicht wenige) überall aus der int ID eine UID machen muss. Und das muss auch im Code gesetzt werden...
Das ist ein Heidenaufwand...
 
Ich denke nicht das ein Wechsel von INT auf UID notwendig ist. Ich dachte es könnte die Sache mit der ID Erzeugung unter Access erleichtern.
 
Hi
ich habe ein Access Frontend mit MS SQL Backend. habe folgendes Problem:
Wenn ich einen neuen Datensatz anlege erzeugt er im Feld B_ID (welches der Primary Key ist) erst nach Verlassen des Datensatzes eine neue ID und nicht direkt beim Anlegen.

Der Datensatz wird in MS-SQL erst angelegt nachdem du ihn mit Access »abgeschickt« hast. Vorher weiß MS-SQL ja auch noch nichts von den neuen Daten. Client-Server-Systeme arbeiten anders als Desktop-Systeme.

Ich habe mehrere Funktionen die die ID direkt beim Anlegen benötigen.
Das ist ganz grundsätzlich schlechtes Anwendungsdesign und lässt sich jetzt nur noch schwer ändern. Versuche Abhängigkeiten verschiedener Schichten in Zukunft zu vermeiden. Für gewöhnlich wird hier zum Beispiel mit einem MVC-Pattern gearbeitet.

Theoretisch solltest du aber die ID nach dem Anlegen mit »SELECT @@IDENTITY AS 'Identity';« abfragen können.

Ich kann aber solange ich den Erfassungsvorgang nicht beendet habe, nicht auf die UID zugreifen.
Daran wird sich meiner Ansicht nach auch nichts ändern lassen. Zumindest nicht wenn die ID von MS-SQL erzeugt werden soll.

Gruß
Hony
 
Ich hab es jetzt erstmal umgangen, indem ich die ID manuell erzeuge (letzte int ID abfragen +1)
schaue mir deine Anmerkungen aber auch mal an.
 
Das wirst du ausprobieren müssen. Ich arbeiten normalerweise nicht mit Access und auch kaum mit MS-SQL. Aber wenn ich das richtig verstanden habe ist die Identitätsspezifikation doch eine reine Access Angelegentheit und hat mit MS-SQL nichts zu tun. Demnach sollte die Abfrage bei von MS-SQL angelegten Auto-ID Feldern funktionieren.

Genauere Infos wirst du allerdings auf der verlinkten Webseite finden.
 
Stimmt. Ich denke @ukulele wird da Genaueres wissen. Wenn ich das richtig interpretiere ist das die MS-SQL Variante von autoincrement und sollte daher funktionieren.
 
Werbung:
Habe mich mit @@IDENTITY eigentlich auch noch nicht befasst da ich noch kein Front-End selbst programmiert habe. Sieht aber so aus als ob das ein paasender Lösungsweg für dich wäre.

Das Problem mit dem max(ID) + 1 besteht ja eigentlich nur, weil deine IDs fortlaufend vergeben werden sollen. Bei UID könnte man so verfahren (erst UID erzeugen, dann Datensatz schreiben, dann weitere Datensätze mit der erzeugten ID als Fremdschlüssel schreiben). Die Warscheinlichkeit das deine UID in dieser Zeit von einem anderen Benutzer generiert wurde ist unvorstellbar gering...

Aber wie gesagt, @@IDENTITY sieht nach einer idealen Lösung aus.
 
Zurück
Oben