Hallo NG!
Mit dem folgenden Code kann ich einen Suchstring zusammenstellen aus allen Elementen, die im entsprechenden Dialog vorhanden sind.
Nun muss ich aber das Ganze auf einem Dialog zum laufen bringen, der Tabs hat (SSTab). Ich muss also einen Suchstring haben, der NUR die Elemente des aktuellen Tabs drin hat, nicht alle aus dem Dialog!
Hoffentlich hab ichs nicht zu kompliziert geschrieben
Function getFilter(dialog As Form, setFilter As String, suchfelder As String)
On Error GoTo Fehler
'Filter leeren
setFilter = ""
suchfelder = ""
'nun alle dataCombos
Dim element As Control
For Each element In dialog.Controls
If Mid(element.Name, 1, 2) = "tb" Then 'alle TextFelder
'aber die Anzeigen sollen nicht angerührt werden
If element.Name <> "tbAnzeige" And element.Name <> "tbModus" Then _
decodTextForFilter element, setFilter, suchfelder
ElseIf Mid(element.Name, 1, 3) = "dcb" Then 'alle Combos
If Not IsNull(element.BoundText) And Trim(element) <> "" Then
' gesuchet Felder anzeigen
suchfelder = suchfelder + ", " + element.DataField
If IsNumeric(element.BoundText) Then
setFilter = setFilter + " and [" + element.DataField + "] =" & _
"" + _
element.BoundText
Else
setFilter = setFilter + " and [" + element.DataField + "] =" & _
"'" + _
element.BoundText + "'"
End If
End If
ElseIf Mid(element.Name, 1, 5) = "dtptb" Then 'alle Datümer
decodDatePickerForFilter element, setFilter, suchfelder
End If
Next
'führendes and weg
If Trim(setFilter) <> "" Then
setFilter = Mid(setFilter, 5)
End If
Exit Function
Fehler:
MsgBox Err.Description + " in getfilter() bei felt " + CStr(element.Name)
End Function
Function decodTextForFilter(oText As TextBox, setFilter As String, suchfelder _
As String)
Dim searchValue
If Trim(oText.DataField) <> "" And Not IsNull(oText.DataField) _
And Trim(oText) <> "" And Not IsNull(oText) Then
' gesuchet Felder anzeigen
suchfelder = suchfelder + ", " + oText.DataField
'prüfen auf Jocker etc.
If InStr(oText, "*") > 0 Or InStr(oText, "%") Then
'Suche mit Joker
setFilter = setFilter + " and " + oText.DataField + " LIKE '" + _
Trim(oText) + "'"
ElseIf InStr(oText, "<>") > 0 Then
'Suche ungleich als
'Suchwert extrahieren
searchValue = Trim(Mid(Trim(oText), InStr(oText, "<>") + 2))
If IsNumeric(searchValue) Then
setFilter = setFilter + " and " + oText.DataField + " <> " + _
searchValue
Else
setFilter = setFilter + " and " + oText.DataField + " <> '" + _
searchValue + "'"
End If
'Hier kommen noch weitere ElseIf für <=, >= usw...
Else
'SONST genauer Treffer
If IsNumeric(Trim(oText)) Then
setFilter = setFilter + " and " + oText.DataField + " = " + _
Trim(oText)
Else
setFilter = setFilter + " and " + oText.DataField + " = '" + _
Trim(oText) + "'"
End If
End If
End If
End Function Vielen Dank für die Hilfe!
Gruss Michael |