Foutmelding in search database bij "lege velden"

Status
Niet open voor verdere reacties.

geertsjelle

Gebruiker
Lid geworden
30 jan 2009
Berichten
87
Hallo allemaal,

Onlangs heb ik met behulp van dit form een search database gemaakt. Deze werkt perfect, ik krijg alleen een foutmelding als ik op "search" druk en ik heb geen selectie criteria ingegeven (Fout 9 tijdens uitvoering: Het subscript valt buiten het bereik). Ik weet dat de database natuurlijk niet kan zoeken zonder zoekcriteria. Maar de melding doet op een gebruiker over komen of er iets mis is met de database. Weet iemand een oplossing voor dit probleem. Zie hieronder de code van het zoekfiter.

Alvast bedankt.
_____________________

Jelle

Code:
Private Function FilterMaken()

    Dim varWhere() As String
    Dim intIndex As Integer, i As Integer

    intIndex = 0

      ' Check kolom1
    If Nz(Me.kolom1, "") <> "" Then
        intIndex = intIndex + 1
        ReDim Preserve varWhere(intIndex)
        varWhere(intIndex) = "[Naam bedrijf] LIKE '*" & Me.bedrijf.Value & "*' "
        
    End If

    ' Check kolom2
    If Nz(Me.CMBkolom2, "") <> "" Then
        intIndex = intIndex + 1
        ReDim varWhere(intIndex)
        
        varWhere(intIndex) = "[markt] = '" & Me.CMBMarkt.Value & "'"
                
    End If
    
      ' Check kolom3
    If Nz(Me.CMBkolom3, "") <> "" Then
        intIndex = intIndex + 1
        ReDim Preserve varWhere(intIndex)
        varWhere(intIndex) = "[status] = '" & Me.CMBstatus.Value & "'"
    End If
    
    ' Check kolom4
    If Nz(Me.CMBkolom4, "") <> "" Then
        intIndex = intIndex + 1
        ReDim Preserve varWhere(intIndex)
        varWhere(intIndex) = "[Regio] = '" & Me.CMBregio.Value & "'"
    End If
    
        ' Check kolom5
    If Nz(Me.CMBkolom5, "") <> "" Then
        intIndex = intIndex + 1
        ReDim Preserve varWhere(intIndex)
        varWhere(intIndex) = "[Intressant voor kal/val] = '" & Me.CMBintressant.Value & "'"
    End If
    
        ' Check kolom6
    If Nz(Me.CMBkolom6, "") <> "" Then
        intIndex = intIndex + 1
        ReDim Preserve varWhere(intIndex)
        varWhere(intIndex) = "[actie] = '" & Me.CMBactie.Value & "'"
    End If
      
    ' Check of er een filter is gemaakt...
    If IsNull(varWhere(1)) Then
        Exit Function
    Else
        FilterMaken = "WHERE "
        For i = LBound(varWhere) To UBound(varWhere)
            FilterMaken = FilterMaken & varWhere(i)
            If i < UBound(varWhere) Then FilterMaken = FilterMaken & " AND "
        Next i
    End If

End Function
 
De melding geeft aan dat je een index aanroept in een array, die niet bestaat.

De debugger valt waarschijnlijk over: IsNull(varWhere(1))

Het eerste element van een array is trouwens ook 0 en niet 1.
Echter, als alle zoekvelden leeg zijn, bestaat varWhere(0) ook niet.

Je kunt beter intIndex op -1 zetten.
Dan in plaats van:
Code:
If IsNull(varWhere(1)) Then
Exit Function

Code:
If intIndex = - 1 Then
Exit Function
gebruiken
 
Hoi Nire,

Bedankt voor je reactie:thumb:
Ik heb de code veranderd maar blijf helaas de foutmelding houden. Zijn er ook nog andere "codes" die ik misschien nog moet aanpassen.
_________________________________

Jelle
 
Ik weet niet of het veel uitmaakt, maar je kunt een Array ook met 1 laten beginnen, als je aan het begin van de algemene declaraties de regel
Option Base 1
opneemt.
Dan hoef je de rest van je code niet aan te passen.

Michel
 
Waarom met een Array en niet gewoon een sting vullen

P.S. onderstaande is niet getest, maar zou moeten werken

Code:
    Private Function FilterMaken()

        Dim varWhere As String


        ' Check kolom1
        If Nz(Me.kolom1, "") <> "" Then
            If varWhere <> "" Then varWhere = varWhere & " AND "
            varWhere = "[Naam bedrijf] LIKE '*" & Me.bedrijf.Value & "*' "
        End If

        ' Check kolom2
        If Nz(Me.CMBkolom2, "") <> "" Then
            If varWhere <> "" Then varWhere = varWhere & " AND "
            varWhere = "[markt] = '" & Me.CMBMarkt.Value & "'"
        End If

        ' Check kolom3
        If Nz(Me.CMBkolom3, "") <> "" Then
            If varWhere <> "" Then varWhere = varWhere & " AND "
            varWhere = "[status] = '" & Me.CMBstatus.Value & "'"
        End If

        ' Check kolom4
        If Nz(Me.CMBkolom4, "") <> "" Then
            If varWhere <> "" Then varWhere = varWhere & " AND "
            varWhere = "[Regio] = '" & Me.CMBregio.Value & "'"
        End If

        ' Check kolom5
        If Nz(Me.CMBkolom5, "") <> "" Then
            If varWhere <> "" Then varWhere = varWhere & " AND "
            varWhere = "[Intressant voor kal/val] = '" & Me.CMBintressant.Value & "'"
        End If

        ' Check kolom6
        If Nz(Me.CMBkolom6, "") <> "" Then
            If varWhere <> "" Then varWhere = varWhere & " AND "
            varWhere = "[actie] = '" & Me.CMBactie.Value & "'"
        End If

        ' Check of er een filter is gemaakt...
        If varWhere <> "" Then
            FilterMaken = "WHERE " & varWhere
        End If

    End Function
 
Wijzig in je code deze regels

Code:
If IsNull(varWhere(1)) Then
         Exit Function

in

Code:
If intIndex = 0 Then
        Exit Function

Grtz,

Tardis
 
Probleem zit hem denk ik niet in
Code:
If IsNull(varWhere(1)) Then
of
Code:
If intIndex = 0 Then

maar in het gebruik van lbound to ubound.
deze gaat namelijk van de laagste tot en met de hoogste. Als er een tussenliggende variabele leeg is dan wordt deze dus gewoon meegenomen, resultaat is een dubbele AND in je query.

Dus je moet iedere variabele controlleren of deze een waarde bevat, of zoals in mijn vorige beschrijving direct de variable vullen.
 
Probleem zit 'm wel degelijk in dat stukje code.
Probeer maar eens uit ;)

Grtz,

Tardis
 
Het werkt!

Hallo allemaal,

Enorm bedankt voor jullie hulp:thumb:

Ik heb de code van Tardis gebruikt en de foutmelding is verleden tijd:)

Nogmaals bedankt allemaal!
______________________________

Jelle
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan