Neuigkeiten:

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

Mobiles Hauptmenü

Suche mit Checkbox

Begonnen von kruemel2302, September 21, 2023, 10:32:24

⏪ vorheriges - nächstes ⏩

kruemel2302

Hallo Leute,

ich brauch dringend Hilfe. Ich habe ein Unterformular mit einer Suche per Button. Jetzt will ich aber noch eine Checkbox integrieren. Diese soll 3 Werte ausgeben und als 2 Kriterium in der Suche fungieren. Einmal wenn in Spalte erledigt_am ein Datum steht (quasi nicht leer), einmal wenn die Spalte erledigt_am kein Datum steht (quasi leer) und einmal soll es alle Anzeigen. Im Formular habe ich die Box check_erl genannt und den dreifachen Status aktiviert. Wie bekomme ich das sinnvoll in den bisherigen Code eingebaut?

Private Sub cmdSuche_Click()
     Dim strFilter As String
     If Len(Me!txtSuche) > 0 Then
         strFilter = "AZ_ARKO LIKE '" _
             & Me!txtSuche & "'"
         Me!Daten_Prozessregister.Form.Filter = strFilter
         Me!Daten_Prozessregister.Form.FilterOn = True
     Else
         Me!Daten_Prozessregister.Form.Filter = ""
     End If
End Sub
  •  

kruemel2302

das funktioniert auch nicht....die Spalte erledigt_am ist als Datum in der Tabelle definiert...Access sagt Typen unverträglich

Private Sub cmdSuche_Click()
       
     
     If Len(Me!txtSuche) > 0 And Me!chkerl = Null Then
         strFilter = "Bearbeiter_ARKO LIKE '" _
             & Me!txtSuche & "'"
         Me!Daten_Prozessregister.Form.Filter = strFilter
         Me!Daten_Prozessregister.Form.FilterOn = True
    ElseIf Len(Me!txtSuche) > 0 And Me!chkerl.Value = True Then
         strFilter = "Bearbeiter_ARKO LIKE '" _
             & Me!txtSuche & "'" And "erledigt_am" > "0"
         Me!Daten_Prozessregister.Form.Filter = strFilter
         Me!Daten_Prozessregister.Form.FilterOn = True
    ElseIf Len(Me!txtSuche) > 0 And Me!chkerl.Value = False Then
         strFilter = "Bearbeiter_ARKO LIKE '" _
             & Me!txtSuche & "'" And "erledigt_am" = Null
         Me!Daten_Prozessregister.Form.Filter = strFilter
         Me!Daten_Prozessregister.Form.FilterOn = True
     Else
         Me!Daten_Prozessregister.Form.Filter = ""
     End If
End Sub
  •  

markusxy

#2
Dein Code offenbart massive Defizite bei den Grundlagen:

Ein Vergleich mit Null in VBA und SQL unterscheidet sich grundsätzlich:

VBA: IsNull(Variable) = True/False
SQL: Field Is Null

Wenn du einen SQL String per VBA zusammenstoppelst - und beim Filter gibt es da keine Alternative,
dann musst du verstehen, dass eine Variable abhängig vom Datentyp immer anders formatiert werden muss.
Es unterscheiden sich String, Datum, Zahl und Zahlen mit Nachkomma-Anteil.

Wenn du in VBA einem String einen Wert zuweist, dann bedeutet ein Hochkomma: Ende des Strings.

ZitatstrFilter = "Bearbeiter_ARKO LIKE '" _
             & Me!txtSuche & "'" And "erledigt_am" > "0"

Hier entsteht ein Vergleich zwischen dem ersten String und dem zweiten Ausdruck
Es wird also verglichen ob "Bearbeiter_ARKO LIKE '" _
             & Me!txtSuche & "'"

und "erledigt_am" > "0" ein True liefern.
Sprich in strFilter steht in so einem Fall natürlich immer der Wert "Falsch"

Hier eine Möglichkeit für den Ausdruck:
strFilter = "Bearbeiter_ARKO LIKE '" _
             & Me.txtSuche & "' And erledigt_am Is Not Null"

Und Like macht einen Muster Vergleich. Weiß nicht ob du da das Konzept verstehst. Schau dir das mal in der Hilfe an.

 
  •  

kruemel2302

ich bin leider nicht sehr bewandert was vba angeht :( vielen Dank!
  •  

kruemel2302

also dank deiner hilfe passt es jetzt mit ja und nein - allerdings fehlt mir quasi der 3. status, wo es alles anzeigen soll. ich hab gelesen, dass dieser status NULL ist aber das funktioniert nicht

das müsste der part im code sein:
If Len(Me!txtSuche) > 0 And chkerl.Value = Null Then
         strFilter = "Bearbeiter_ARKO LIKE '" _
             & Me!txtSuche & "'"
         Me!Daten_Prozessregister.Form.Filter = strFilter
         Me!Daten_Prozessregister.Form.FilterOn = True
  •  

kruemel2302

habs hinbekommen. durch die änderung der reihenfolge der elseif. funktioniert jetzt! vielen dank nochmal
  •