Neuigkeiten:

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

Mobiles Hauptmenü

Warum funktioniert dieser RS nicht richtig??

Begonnen von Knatterkopf, Mai 20, 2010, 10:42:31

⏪ vorheriges - nächstes ⏩

Knatterkopf

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

Knatterkopf

Kleiner Erfolg:
Habe es mit "If IsNull() probiert und es funktiniert ;D
Aber wer Verbesserungsvorschläge hat, bitte gerne melden.

Lg
Adrian

database

#2
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
Loop

die 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

Knatterkopf

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

database

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

Knatterkopf

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