Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Atuatuca am März 06, 2016, 10:50:48

Titel: ID (= Primärschlüsserl) erst beim Speichern vergeben
Beitrag von: Atuatuca am März 06, 2016, 10:50:48
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
Titel: Re: ID (= Primärschlüsserl) erst beim Speichern vergeben
Beitrag von: MzKlMu am März 06, 2016, 10:54:05
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.
Titel: Re: ID (= Primärschlüsserl) erst beim Speichern vergeben
Beitrag von: Atuatuca am März 06, 2016, 11:23:26
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
Titel: Re: ID (= Primärschlüsserl) erst beim Speichern vergeben
Beitrag von: trebuh am März 06, 2016, 12:14:49
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

Titel: Re: ID (= Primärschlüsserl) erst beim Speichern vergeben
Beitrag von: Atuatuca am März 06, 2016, 12:38:36
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
Titel: Re: ID (= Primärschlüsserl) erst beim Speichern vergeben
Beitrag von: DF6GL am März 06, 2016, 13:18:00
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.
Titel: Re: ID (= Primärschlüsserl) erst beim Speichern vergeben
Beitrag von: trebuh am März 06, 2016, 14:55:41
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
Titel: Re: ID (= Primärschlüsserl) erst beim Speichern vergeben
Beitrag von: Atuatuca am März 06, 2016, 15:20:16
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