Hallo,
der Filter wird über die Routine aus der Hilfe erstellt :
Private Sub clsobjGrid_FilterButtonClick(ByVal nCol As Long, sText As String, _
bCancel As Boolean)
' Filter übernehmen und kennzeichnen
Dim i As Long
Dim sOp As String
Dim sValue As String
Dim bText As Boolean
Dim strErrorMsg As String
On Error GoTo objGrid_FilterButtonClick_ErrorHandler
With clsobjGrid
' handelt es sich um ein Text- oder um ein numerisches Feld?
Select Case .Columns(nCol).DataType
Case dtText, dtMemo, dtHyperlink
bText = True
Case Else
bText = False
End Select
' Filterbedingung zusammenstellen
If left$(sText, 2) = "<>" Then
sOp = "<>"
sValue = LTrim$(Mid$(sText, 3))
ElseIf UCase$(left$(sText, 9)) = "NOT LIKE " Then
sOp = "NOT LIKE"
sValue = LTrim$(Mid$(sText, 10))
ElseIf UCase$(left$(sText, 4)) = "NOT " Then
sOp = "NOT"
sValue = LTrim$(Mid$(sText, 5))
ElseIf left$(sText, 2) = ">=" Or left$(sText, 2) = "=>" Then
sOp = ">="
sValue = LTrim$(Mid$(sText, 3))
ElseIf left$(sText, 2) = "<=" Or left$(sText, 2) = "=<" Then
sOp = "<="
sValue = LTrim$(Mid$(sText, 3))
ElseIf InStr("<>=", left$(sText, 1)) > 0 Then
sOp = left$(sText, 1)
sValue = LTrim$(Mid$(sText, 2))
Else
sOp = IIf(bText, "LIKE", "=")
sValue = sText
If sValue = "''" Or sValue = String$(2, Chr$(34)) Then sValue = ""
If bText Then
If right$(sValue, 1) = "*" Then
sValue = left$(sValue, Len(sValue) - 1) & "%"
ElseIf right$(sValue, 1) <> "%" Then
sValue = sValue & "%"
End If
End If
End If
If sValue = "''" Or sValue = String$(2, Chr$(34)) Then sValue = ""
If bText And left$(sValue, 1) <> "'" And Len(sValue) > 0 Then
If .Columns(nCol).DataType = dtHyperlink Then sValue = "#" & sValue
sValue = "'" & sValue & "'"
Else
If .Columns(nCol).DataType = dtBoolean Then
sValue = IIf(sValue = "ja", "True", "False")
ElseIf .Columns(nCol).DataType = dtDate Then
If IsDate(sValue) Then
sValue = "#" & Format$(CDate(sValue), "m-d-yy") & "#"
End If
End If
End If
.LockUpdate True
If sOp = "" And sValue = "" Then
' Filter ausschalten
.Recordset.Filter = ""
nCol = 0
Else
' Filter einschalten
.Recordset.Filter = "[" & .Recordset.Fields(nCol - 1).Name & "] " & sOp & _
" " & sValue
End If
' Filtersymbol anzeigen, Text fett hervorheben,
' und bei allen anderen Spalten den Filter deaktiviert anzeigen
For i = 1 To .Cols
.Columns(i).FilterShowDisabled = (i <> nCol)
.Columns(i).FilterBold = (i = nCol)
.Columns(i).ImageAlign = ALIGNMENT_RIGHT
.Columns(i).image = IIf(i = nCol, clsobjGrid.ImageByKey("imgPinRot"), 0)
Next i
.LockUpdate False
.Refresh
End With Das Recordset kommt von einem SQL Server über :
Set cmd = New ADODB.Command
cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "tos_sp_Massenübersicht"
Set MakeRecordset_SP = cmd.Execute Eigentlich nichts besonderes.
Mit ist nur aufgefallen, dass bei sortierten Feldern, die einen Doppelpunkt haben, ab hier die Liste aus der Reihe tanzt ...
Gruß
Benne |