Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: sllani am Mai 16, 2014, 09:01:00

Titel: Primärschlüssel erst bei Speichern vergeben
Beitrag von: sllani am Mai 16, 2014, 09:01:00
Hallo,
bin ein Access-Neuling und habe folgendes Problem:
Ich verwende in meiner Datenbank teilweise die Primärschlüssel auch als Identifikationsnummer im "richtigen" Leben.
Deshalb sollte diese auch möglichst durchgehend sein (ohne fehlende Zahlen dazwischen, weil man sich sonst fragen würde, wo die Nummern dazwischen gelandet sind). Wenn jetzt ein Benutzer in meinem Formular einen Neuen Datensatz anlegt, etwas einträgt und es sich dann aber anders überlegt (was nicht unwahrscheinlich ist), verliere ich den zugehörigen Primärschlüssel. Gibt es eine Möglichkeit Access zu sagen, er soll das Formular solange ignorieren bis man auf den SpeicherButton drückt?
Habe es mit Begintrans versucht, aber ich müsste dann Committrans in einer anderen Prozedur haben, die durch klicken auf Speichern ausgelöst wird.
Mir ist klar, dass ich die Identifikationsnummer auch von dem Primärschlüssel trennen könnte, aber das würde ich ungern tun, da ich dadurch sicher stelle, dass niemals etwas mit der Identifkationsnummer passieren kann.
Gibt es da irgendeine Lösung?

Viele Grüße,
sllani
Titel: Re: Primärschlüssel erst bei Speichern vergeben
Beitrag von: MaggieMay am Mai 16, 2014, 09:50:49
Hallo,

das könntest du höchstens mit einem ungebundenen Formular hinbekommen. Oder du verzichtest auf den Autowert und vergibst die fortlaufende Nummer selbst. Aber wie sieht es dann nach Datensatzlöschungen aus?
Titel: Re: Primärschlüssel erst bei Speichern vergeben
Beitrag von: sllani am Mai 16, 2014, 10:01:43
Hallo,

Danke!
Das habe ich fast befürchtet.
Datensätze werden aber generell nicht gelöscht, es gibt nur die Möglichkeit einen Tag "gelöscht" zu vergeben.
Aber der Datensatz bleibt immer erhalten.
Titel: Re: Primärschlüssel erst bei Speichern vergeben
Beitrag von: MzKlMu am Mai 16, 2014, 10:20:17
Hallo,
man kann auch bei einem Autowert den "verlorenen" Datensatz wieder vergeben.
Prinzip (ungetestet):
Public Function NaechsterAutowert()
' !!!!!!! Verweis auf Microsoft DAOx.x setzen!!!!!!!!!!!
Dim Rs As DAO.Recordset
Set Rs = CurrentDb.OpenRecordset("Tabellenname")
        Rs.AddNew
        Rs!Autowertfeld = DMax("Autowertfeld", "Tabellenname") + 1
        Rs.Update
End Function

Die Funktion kannst Du in den Speicherbutton integrieren.

Generell sollte aber der PS keine Funktion haben, außer PS.
Du kannst auch bei einer selbst verwalteten Identifikationsnummer die Kontrolle behalten. Man kann das Feld im Formular z.B. für Eingaben sperren.