Mai 20, 2022, 15:16:31

Neuigkeiten:

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


Datensatz automatisch löschen, wenn Bedingung nicht erfüllt

Begonnen von Knatterkopf, Mai 14, 2010, 11:12:20

⏪ vorheriges - nächstes ⏩

Knatterkopf

Hallo,

Ich habe mir folgendes gedacht:
Habe ein Formular mit Personal Daten, wo ich DS nach Schicht und Abteilung eingebe.
Dabei werden Nur Namen und Personalnummer eingegeben. Schicht und Abteilung werden nach Eingabe des DS mit den Werten aus Kombiboxen gefüllt.
Ich habe aber leider keine Idee, wie ich es realisieren kann, dass bei leeren Kombiboxen der neue DS gar nicht gespeichert werden soll, bzw. wieder gelöscht wird. :-[
Wie kann ich eigentlich auf den gerade aktuellen bzw. offenen DS zugreifen?

Private Sub Form_AfterUpdate()
Dim DB As DAO.Database, Rs As DAO.Recordset

Set DB = CurrentDb
Set Rs = DB.OpenRecordset("select TAB_Personal.Schicht, TAB_Personal.Abteilung from TAB_Personal Where Schicht is Null")

If Not IsNull(Me!FilterSchicht) And Not IsNull(Me!FilterAbteilung) Then
    Rs.Edit
    Rs![Schicht] = Me.FilterSchicht
    Rs![Abteilung] = Me.FilterAbteilung
    Rs.Update
Else
    MsgBox "Bitte Schicht und Abteilung wählen!", vbHinweis, "Unzureichende Auswahl!"
End If
Rs.Close
DB.Close
End Sub


Mit einer Sub Form_Change() wäre das wahrsch. viel einfacher, aber geht hier irgendwie nicht.
Wäre Super, wenn mir da jemand helfen kann!

Lg
Adrian

database

Hallo,

Zitatselect TAB_Personal.Schicht, TAB_Personal.Abteilung from TAB_Personal Where Schicht is Null


Bezieht ein Recordset, in dem ALLE Datensätze enthalten sind, deren Eintrag im Feld Schicht gleich NULL ist!
Du würdest daher nicht auf einen bestimmten Datensatz (z.B. für eine bestimmte Personalnummer) Änderungen absetzen.
Wenn das auf eine bestimmte Personalnummer bezogen werden soll, muss die Personalnummer mit in die WHERE-Klausel!

Zitatdass bei leeren Kombiboxen der neue DS gar nicht gespeichert werden soll

...hast du im Else-Zweig realisiert.

Bei ungebundenem Formular solltest du die 'Speichern-Aktion' über einen Button-Klick auslösen.
Bei gebundenem Formular sollte das Ereignis BeforeUpdate verwendet werden um den Automatismus des Schreibens auf die Tabelle unterbrechen zu können.


Grüße

Peter


Knatterkopf

Hi Peter,
danke für deine schnelle Hilfe :D

Hab es so realisiert:

Private Sub Form_AfterUpdate()
Dim DB As DAO.Database, Rs As DAO.Recordset

Set DB = CurrentDb
Set Rs = DB.OpenRecordset("select * from TAB_Personal Where Schicht is Null")

If Not IsNull(Me!FilterSchicht) And Not IsNull(Me!FilterAbteilung) Then
    Rs.Edit
    Rs![Schicht] = Me.FilterSchicht
    Rs![Abteilung] = Me.FilterAbteilung
    Rs.Update
   
Else
    MsgBox "Bitte Schicht und Abteilung wählen!", vbHinweis, "Unzureichende Auswahl!"
    Rs.MoveLast
    MsgBox "Ungültiger Datensatz: " & Rs![Name] & " wird entfernt!", vbHinweis, "Löschvorgang!"
    Rs.Delete
    Me.Requery
End If
Rs.Close
DB.Close
End Sub


Funktioniert ganz prima, aber wenn du noch n Haken findest nur raus damit ;D

Lg
Adrian

database

Hi,

ich darf nochmals diesen Hinweis unterstreichen!

ZitatBezieht ein Recordset, in dem ALLE Datensätze enthalten sind, deren Eintrag im Feld Schicht gleich NULL ist!
Du würdest daher nicht auf einen bestimmten Datensatz (z.B. für eine bestimmte Personalnummer) Änderungen absetzen.
Wenn das auf eine bestimmte Personalnummer bezogen werden soll, muss die Personalnummer mit in die WHERE-Klausel!


Leider hast du auf diesen Hinweis nichts vermeldet, ich hoffe du hast ihn in deiner Euphorie nicht überlesen! ;D

Das Rollen auf den letzten Datensatz im Recordset  :-\würde ich persönlich als zu unsicher sehen! :-\

Peter

Knatterkopf

Hi Peter,

Als bestimmten DS will auch nur den, der als letztes bzw. gerade generiert wird, wenn ich im Formular in der *-Zeile etwas eingebe.
Also sobald in einer der beiden Kombiboxen nichts (Null) drin steht, darf dieser DS gerne wieder gelöscht werden.
Am besten dieser dann gar nicht erstellt werden, aber ich habe keine Ahnung wie ich das hinbiege...

Du hast du recht, ich rolle auf den letzten DS.
Ich hoffe es erwischt immer den, den es gerade bei Eingabe in der *-Zeile generiert hat. ;D

Lg
Adrian