Hi,
hab da ein Prolem was ich einfach nicht kapier :(
Ich will die Spalten Schicht und Abteilung in der Tabelle Personal daraufhin Prüfen ob etwas drin steht oder nicht.
Falls nicht, dann soll was automatisch eingetragen werden (Werte aus Kombifeldern).
Falls in den Kombifeldern nichts ausgewählt wurde, soll der DS gelöscht werden.
Falls der in der zugehörigen Spalte "Name" nichts drin steht, dann soll der DS auch gelöscht werden.
Habe das so realisiert, aber da ist eben noch einiges falsch :(
Private Sub Form_AfterUpdate()
Dim DB As DAO.Database, Rs As DAO.Recordset
Set DB = CurrentDb
Set Rs = DB.OpenRecordset("select * from TAB_Personal")
If Not IsNull(Me!FilterSchicht) And Not IsNull(Me!FilterAbteilung) Then
Do While Not Rs.EOF
If InStr(Nz(Rs![Schicht], ""), "") Or InStr(Nz(Rs![Abteilung], ""), "") Then
Rs.Edit
Rs![Schicht] = Me.FilterSchicht
Rs![Abteilung] = Me.FilterAbteilung
Rs.Update
End If
If Rs![Name] = "" Then
MsgBox "Ungültiger Datensatz: " & Rs![Name] & " wird entfernt!", vbHinweis, "Löschvorgang!"
Rs.Delete
End If
Rs.MoveNext
Loop
Me.Requery
Else
Do While Not Rs.EOF
If InStr(Nz(Rs![Schicht], ""), "") Or InStr(Nz(Rs![Abteilung], ""), "") Then
MsgBox "Eingabe Schicht oder Abteilung unvollständig!", vbHinweis, "Unzureichende Eingabe!"
MsgBox "Ungültiger Datensatz: " & Rs![Name] & " wird entfernt!", vbHinweis, "Löschvorgang!"
Rs.Delete
End If
Rs.MoveNext
Loop
Me.Requery
End If
Rs.Close
DB.Close
End Sub
Die beiden Problemzeilen sind die If-Abfragen.
Problem: Er springt rein, obwohl er nicht darf >:(
Wäre um Hilfe sehr dankbar!
Lg
Adrian
Kleiner Erfolg:
Habe es mit "If IsNull() probiert und es funktiniert ;D
Aber wer Verbesserungsvorschläge hat, bitte gerne melden.
Lg
Adrian
Hallo Adrian,
ZitatDie beiden Problemzeilen sind die If-Abfragen.
Problem: Er springt rein, obwohl er nicht darf
Also weißt du ... davon gibts 4!
Dann fällt mir auf dass du hier ALLE Datensätze aus der Tabelle TAB_Personal abrufst.
ZitatSet Rs = DB.OpenRecordset("select * from TAB_Personal")
und in der nachfolgenden WHILE-Schleife ALLE Datensätze änderst ???
Wie kommt es, dass DS existieren wo kein Name eingegeben wurde...?
Mit currentDB.Execute("DELETE FROM TAB_Personal WHERE Name Is Null") sollte die Bereinigung auch funktionieren, wodurch du die Anzahl der Datensätze die du dann mit
Set Rs = DB.OpenRecordset("select * from TAB_Personal WHERE Schicht Is Null OR Abteilung Is Null")
erhältst um eben diese gelöschten DS geringer ist.
In der Schleife sollte dann
Do While Not Rs.EOF
If IsNull(Rs![Schicht]) then
RS.Edit
Rs![Schicht] = Me.FilterSchicht
Rs.Update
End if
If IsNull(Rs![Abteilung]) Then
Rs.Edit
Rs![Abteilung] = Me.FilterAbteilung
Rs.Update
End If
Rs.MoveNext
Loopdie notwendigen Aktualisierungen ermöglichen.
Was du mit dem Else-Zweig in deinem Code bewerkstelligen willst sit mir nicht ganz geheuer, da dieser nicht zur Bedingung passt!
Grüße
Peter
Hi Peter,
habe es so wie du vorgeschlagen hast übernommen.
Vielen Dank, macht jetzt auch mehr Sinn ;D
DS ohne Name kommt vor, wenn ein Schlamper keinen Namen eingibt. Dann soll der DS gelöscht werden.
Lg
Adrian
Hallo,
ZitatDS ohne Name kommt vor, wenn ein Schlamper keinen Namen eingibt. Dann soll der DS gelöscht werden
dann fang' doch dieses Problem auf - Ereignis 'Vor Aktualisierung' des Formulars wenn es sich um ein gebundenes Formular handelt.
Da kannst du die Vollständigkeit der Daten noch prüfen und ggf die Aktualisierung unterbinden bzw. die Änderung wieder verwerfen.
HTH
Peter
uijui ich zapfen :D
da hab ich gar nicht dran gedacht :-[
werd es morgen auch mal so rum probieren.
Bis dann und ein schönen Abend
Adrian