Syntaxt error bij filteren op datum

Status
Niet open voor verdere reacties.

BasK

Gebruiker
Lid geworden
8 nov 2008
Berichten
14
Beste,
Op basis van de voorbeelddatabase rptsmp97 heb ik een filterformulier opgezet. Aangezien de voorbeelddatabase enkel textvelden filtert, heb ik een toevoeging getracht te maken om een datum in te voeren welke aangeeft dat vanaf die datum de data moet worden weergegeven. Hieronder staat de vba weergeven. Als ik dan vervolgens de opdracht wil laten uitvoeren, krijg ik de melding dat 'Syntax error in date in query expression '([Regio]="Zuid-West" And [Startdatum]="1-2-2011" And [Startdatum] >= # 1-2-201)' Sowieso geeft de groter dan het jaartal verkeerd en krijg het niet voor elkaar dat de gehele functie werkt.

Alvast bedankt voor de hulp!!
gr, Bas

Private Sub Command28_Click()

Dim strSQL As String, intCounter As Integer
'Build SQL String
For intCounter = 1 To 5
If Me("Filter" & intCounter) <> "" Then
strSQL = strSQL & "[" & Me("Filter" & intCounter).Tag & "] " & " = " & Chr(34) & Me("Filter" & intCounter) & Chr(34) & " And "
End If
If Me("Filter" & intCounter).Tag = "Startdatum" Then
strSQL = strSQL & "[" & Me("Filter5").Tag & "] " & ">=" & "#" & Me("Filter" & intCounter) & "#" & "And"
End If

Next

If strSQL <> "" Then
'Strip Last " And "
strSQL = left(strSQL, (Len(strSQL) - 5))
'Set the Filter property
Reports![rptSelectie].Filter = strSQL
Reports![rptSelectie].FilterOn = True
Else
Reports![rptSelectie].FilterOn = False
End If

End Sub
 
Code:
([Regio]="Zuid-West" And [Startdatum]="1-2-2011" And [Startdatum] >= # 1-2-201)
Is natuurlijk helemaal fout, want je filtert twee keer op hetzelfde veld (Startdatum), met tegenstrijdige waarden ook nog eens een keer. Je code heeft een loop van 1-5, waarin je twee filters tegelijk aanmaakt; En als ik je code zie, dan klopt dat ook wel. Elke loop pakt namelijk twee keer een IF...End IF, en in elke IF wordt een filter toegevoegd. En dat is uiteraard dubbelop. Ik zou zeggen: gebruik er één.

Een tweede probleem is, dat VBA werkt met Amerikaanse datumnotatie. Jij hebt ongetwijfdeld een Europese database, met Europese datums. Je filtering gaat zo dan ook niet werken. De onderstaande constructie werkt wel:

Code:
    Const strcJetDate = "\#mm\/dd\/yyyy\#"  'Pas deze code NIET aan, anders werkt hij niet...
    strWhere = strSQL & "[" & Me("Filter" & intCounter).Tag & "] >= " & Format(Me("Filter" & intCounter), strcJetDate) & " AND "


Nog een verzoekje: (je bent hier nog nieuw, dus je weet dat uiteraard nog niet...) kun je de code opmaken met de knop ( # ), (Code heet die), dan ziet de code er een stuk leesbaarder uit.
 
OctaFish,

Ik zal in het vervolg de code opmaken via de knop#.

Bedankt voor je respons. Het is me duidelijk dat ik te maken heb met amerikaanse datum in vergelijking met mijn database volgens europese standaarden. Je geeft aan dat er twee filters tegelijk worden aangemaakt. Is het misschien mogelijk dat je me op weg helpt met een VBA-code gebaseerd op de mijne zodat ik daarmee verder kan knutselen. Ik kom er helaas niet uit en het is het laatste gedeelte van de datebase voordat ik het kan gebruiken.

Alvast erg bedankt!

gr,Bas
 
Probeer dit eens:

Code:
Const strcJetDate = "\#mm\/dd\/yyyy\#"  'Pas deze code NIET aan, anders werkt hij niet...

For intCounter = 1 To 5
    If Me("Filter" & intCounter) <> "" Then
        If strSQL <> "" Then strSQL = strSQL & " AND "
        If Me("Filter" & intCounter).Tag = "Startdatum" Then
            strSQL = strSQL & "[Startdatum] >= " & Format(Me("Filter" & intCounter), strcJetDate)
        Else
            strSQL = strSQL & "[" & Me("Filter" & intCounter).Tag & "] = " & Chr(34) & Me("Filter" & intCounter) & Chr(34)
        End If
    End If
Next

De dubbele IF moet je nesten; alleen bij het datumveld moet het datumfilter worden gebruikt, en anders de tekstvariant. Bovendien zette je er overal AND achter, en dat is ook niet goed, want een filter mag niet eindigen met AND. Dus er zit nu een check bij, die de AND parameter toevoegt na de eerste filterstring.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan