vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fragen & Antworten rund um sev-Komponenten
Fehler beim setzen des Filters - sevDatagrid2 
Autor: Meik01
Datum: 02.03.10 09:27

Hallo,
ich habe folgendes Problem:

Wenn ich folgenden Code verwende bekomme ich immer die Fehlermeldung

Fehler beim setzen des Filters!
9-Index außerhalb des gültigen Bereichs.


Was habe ich im Code übersehen bzw. falsch gemacht?

Eigentlich ist es der Code aus der Beispiel DB nur ein wenig abgewandelt
bezüglich der Spalten in Denen die ID gemerkt werden soll.

Private Sub SetFilter()
  ' Filter auf Recordset anwenden
  Dim i As Long
  Dim sOp As String
  Dim sValue As String
  Dim sOrder As String
  Dim bText As Boolean
  Dim nScrollPos As Long
  Dim sText As String
  Dim oRs As DAO.Recordset
 
  On Error GoTo ErrHandler
 
  sWHERE = ""
  With Grid1
    .LockUpdate True
 
    For i = 1 To .Cols
      sText = .Columns(i).Filter
      sFilter(i) = sText
 
      If Not .Columns(i).FilterShowDisabled And Len(sText) > 0 Then
        .Columns(i).ImageAlign = ALIGNMENT_RIGHT
        .Columns(i).Image = 3
 
        ' handelt es sich um ein Text- oder um ein numerisches Feld?
        Select Case .Columns(i).DataType
          Case dtText, dtMemo, dtHyperlink
            bText = True
          Case Else
            bText = False
        End Select
 
        ' Falls Inhalt-Spalte -> gemerkte ID verwenden
        If i = .GetCol("Inhalt") Then sText = CStr(.Columns(i).Tag)
        ' Falls Artikelgruppe-Spalte -> gemerkte ID verwenden
        If i = .GetCol("Artikelgruppe") Then sText = CStr(.Columns(i).Tag)
        ' Falls LieferantNr-Spalte -> gemerkte ID verwenden
        If i = .GetCol("LieferantNr") Then sText = CStr(.Columns(i).Tag)
 
        ' 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(i).DataType = dtHyperlink Then sValue = "#" & sValue
          sValue = "'" & sValue & "'"
        Else
          If .Columns(i).DataType = dtBoolean Then
            sValue = IIf(sValue = "ja", "True", "False")
          ElseIf .Columns(i).DataType = dtDate Then
            If IsDate(sValue) Then
              sValue = "#" & Format$(CDate(sValue), "m-d-yy") & "#"
            End If
          End If
        End If
 
        ' WHERE-Bedingung zusammenbauen
        sWHERE = sWHERE & "([" & .Recordset.Fields(i - 1).Name & "] " & sOp & "" & _
          "" & sValue & ") AND "
      Else
        .Columns(i).Image = 0
      End If
    Next i
 
    ' aktuell eingestellte Sortierung merken
    sOrder = .SortOrder
 
    ' horizontale Scroll-Position merken
    nScrollPos = .HScrollPos
 
    If sWHERE = "" Then
      ' Filter ausschalten
      Set oRs = oDB.OpenRecordset(sSQL)
      bIsFilterSet = False
    Else
      ' Filter einschalten
      sWHERE = Left$(sWHERE, Len(sWHERE) - 5)
      Set oRs = oDB.OpenRecordset(sSQL & " WHERE " & sWHERE)
      bIsFilterSet = True
    End If
    Set .Recordset = oRs
 
    ' Sortierung einstellen
    .DoSort sOrder
 
    ' horizontale Scrollposition wiederherstellen
    .HScrollPos = nScrollPos
 
    ' Summe der Beträge ermitteln
    'ShowSumme
 
    .LockUpdate False
    .Refresh
 
  End With
  oRs.Close
 
ErrEnd:
  Set oRs = Nothing
  Exit Sub
 
ErrHandler:
  MsgBox "Fehler beim Setzen des Filters!" & vbCrLf & CStr(Err.Number) & " - " _
    & Err.Description
  Grid1.LockUpdate False
  Resume ErrEnd
End Sub
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Fehler beim setzen des Filters - sevDatagrid21.165Meik0102.03.10 09:27
Re: Fehler beim setzen des Filters - sevDatagrid2845ModeratorDieter02.03.10 09:32
Re: Fehler beim setzen des Filters - sevDatagrid2775Meik0102.03.10 11:10

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel