Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Primärschlüssel erst bei Speichern vergeben

Begonnen von sllani, Mai 16, 2014, 09:01:00

⏪ vorheriges - nächstes ⏩

sllani

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

MaggieMay

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?
Freundliche Grüße
MaggieMay

sllani

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.

MzKlMu

#3
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.
Gruß Klaus