Neuigkeiten:

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

Mobiles Hauptmenü

ID (= Primärschlüsserl) erst beim Speichern vergeben

Begonnen von Atuatuca, März 06, 2016, 10:50:48

⏪ vorheriges - nächstes ⏩

Atuatuca

Hallo Access-O-Maniacs,

gibt es eine möglichkeit, die ID (=Primärschlüssel + Autowert), erst beim Speichern (Befehlsschaltfläche) des Datensatzes zu vergeben.

Jetzt ist es in mein Formular so, dass die ID vergeben wird, sobald in irgend ein Feld ein Wert eingetragen wird. Ich möchte aber, dass die ID erst vergeben wird, wenn auf den Speicher-Schaltfläche geklickt wird.

Gruss
Atuatuca

MzKlMu

Hallo,
nein, das ist mit einem Autowert nicht möglich.
Wozu auch, ein Autowert sollte keine Funktion haben, außer PS. Lücken spieln da keine Rolle.
Gruß Klaus

Atuatuca

Hallo MzKlMu,

also eine zusätzliche Spalte in der Tabelle einfügen (lfd_Nr) , Das PS-Feld nicht anzeigen, sondern Lfd_Nr und bei ein neuer Datensatz, die höchste lfd_nr ermitteln, dann + 1 und im Feld lfd_nr anzeigen und beim drücken auf Speichern erst in die Tabelle schreiben.

Gruss
Atuatuca

trebuh

Hallo,
Wenn ich es richtig verstehe, willst Du, dass die Daten erst gespeichert werden, wenn der Speicher-Button geklickt wird.

Das geht prinzipell schon.

Ins Klassenmodul des Formulars den Code:
Option Compare Database
Option Explicit
[b]Private bolsichern As Boolean[/b]


Ins Ereignis "Nach Aktualisieren":
Private Sub Form_AfterUpdate()

    bolsichern = False

End Sub


Ins Erreignis "Vor Aktualisierung"

Private Sub Form_BeforeUpdate(Cancel As Integer)

            If Not bolsichern Then
               Me.Undo
            End If
         
End Sub


Und zuletzt in das Button-Klick Erreignis:

Private Sub cmdSpeichern_Click()

        bolsichern = True
        DoCmd.RunCommand acCmdSaveRecord

End Sub


Atuatuca

Hallo Trebuh,

ZitatWenn ich es richtig verstehe, willst Du, dass die Daten erst gespeichert werden, wenn der Speicher-Button geklickt wird.

Genau.

Zuvor soll er noch die Eingaben prüfen und wenn welche Fehlen, den jeweiligen Hintergrund Gelb machen. Das Prüfen und Gelbmachen funktioniert soweit schon.

Micht stört nur, dass wenn eine Eingabe getätigt wurde, und dann wieder verworfen wird, der PS vergeben ist.

ZitatIns Klassenmodul des Formulars den Code:

Habe es in ein Klassenmodul gepackt, aber funktioniert nicht, was ich erwartet haben.
Wie kann ich ein Klassenmodul einem Formular zuordnen ?
Sorry, aber ich stecke, was Access betrifft, noch in den Babyschuhen.

Gruss
Atuatuca

DF6GL

Hallo,
Zitat
Micht stört nur, dass wenn eine Eingabe getätigt wurde, und dann wieder verworfen wird, der PS vergeben ist.

Wenn Dich das stört, muss Du die ID-Nr selbst in die Hand nehmen, d. h. selbst berechnen und speichern. Wenn ein Autowert erst einmal generiert wurde, lässt er sich nicht mehr korrigieren.

Ein Klassenmodul ist das Modul, in dem sich auch die Ereignisprozeduren des entspr. Formulares ( und dessen Steuerelemente) befinden..


ZitatWie kann ich ein Klassenmodul einem Formular zuordnen ?
Da muss gar nichts zugeordnet werden..  Sobald die Form-Eigenschaft "Hat Modul" auf Ja gesetzt oder eine Ereignisprozedur erzeugt wird, wird automatisch das Klassenmodul angelegt.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

trebuh

Hallo Atuatuca,
ZitatIns Klassenmodul des Formulars den Code:

Wenn Du z.b auf den VBA-Code Deines Speicher-Erreignisses gehst, und dann ganz nach oben scrollst, müsste zumindest ganz oben
Option Compare Database stehen.
Besser noch
Option Compare Database
Option Explicit


und da schreibst Du dann das Private bolsichern As Boolean drunter.

Also:

Option Compare Database
Option Explicit
[b]Private bolsichern As Boolean[/b]


Wegen Deiner ID (Autowert):
Das würde ich so lassen. Mache einfach in der Tabelle ein extra Feld für die laufende Nummer.

Im Formular kannst Du dann in dem Speicher-Button vor der Speicher-Aktion den höchsten Wert der laufenden Nummer ermitteln, und dann einfach eins dazuzählen.

Gruß trebuh

Atuatuca

Hallo Trebuh,

habe es hinbekommen, aber wie du schon sagtes, nur wenn keine Eingaben getätigt wurden.
Werde es dann zu einem späteren Zeitpunkt mit der lfd.Nr. machen.

Danke & Gruss
Atuatuca