Keuzeformulier werkt niet op datum

Status
Niet open voor verdere reacties.

Risk

Gebruiker
Lid geworden
5 jul 2010
Berichten
275
Forum,

Toch nog een foutje ontdekt.

In mijn database heb ik een aantal keuze/selectieformulieren die allemaal keurig werken, behalve een op het veld schadedatum.

Als ik selecteer op een Schadedatum dan moet er verschijnen 1 (als er op die datum 1 schade is gevallen en uiteraard meer bij meerdere) bij aantal en dan kan ik via een knop e.e.a. uitprinten. Dat werkt op de 3 andere selectievelden, behalve bij Schadedatum. Alles is conform de andere velden ingesteld. Wat doe ik fout.

Dank voor d ehulp bijdeze,

Risk

In het eigenschappenvenster staat:
Code:
SELECT DISTINCT [Schadedatum] FROM [Algehele informatie per chauffeur] ORDER BY [Schadedatum];
Code:
cboSchadedatum



Code:
Private Sub cboSchadedatum_AfterUpdate()
Call FilterMaken
End Sub

Private Sub cboVestiging_AfterUpdate()
Call FilterMaken
End Sub

Private Sub cboNaam_AfterUpdate()
Call FilterMaken
End Sub

Private Sub cboJaar_AfterUpdate()
Call FilterMaken
End Sub


Function FilterMaken()
Dim sFilter As String


If Me.cboJaar & "" <> "" Then
    sFilter = "[Jaar]=" & Me.cboJaar
    If Me.cboVestiging & "" <> "" Then
        sFilter = sFilter & " AND [Vestiging] = '" & Me.cboVestiging & "'"
    End If
Else
    If Me.cboVestiging & "" <> "" Then
        sFilter = "[Vestiging] = '" & Me.cboVestiging & "'"
    End If
End If

If Me.cboNaam & "" <> "" Then
    If sFilter <> "" Then sFilter = sFilter & " AND "
    sFilter = sFilter & "[Naam] = '" & Me.cboNaam & "'"
End If

If Me.cboSchadedatum & "" <> "" Then
    If sFilter <> "" Then sFilter = sFilter & " AND "
    sFilter = sFilter & "[Schadedatum] = '" & Me.cboSchadedatum & "'"
End If

If sFilter <> "" Then
    Me.Filter = sFilter
    Me.FilterOn = True
Else
    Me.Filter = ""
    Me.FilterOn = False
End If

End Function
 
Schadedatum is een datum (de naam zegt het al) en dat kun je niet filteren alsof het een tekst is. Je moet het filter dus opbouwen als een datumfilter.
 
Michel,

Dank, ik had al zo'n vaag vermoeden. Ik was al blij dat ik het keuzeformulier onder de knie heb gekregen met hulp via dit forum (lees jezelf). Hoe bouw ik een datumfilter? Ken de filter alleen uit de taakbalk, maar niet op de manier om via een keuze/selectieformulier e.e.a. te maken.

Mag ik je hulp hierbij vragen? (en ik print ook uit het formulier een rapport met de gekozen selecties.)
.
Code:
Private Sub Knop405_Click()

stDocName = "Omstandigheid per schade per chauffeur"
Dim sFilter As String
If Me.cboJaar & "" <> "" Then
    sFilter = "[Jaar]=" & Me.cboJaar
    If Me.cboVestiging & "" <> "" Then
        sFilter = sFilter & " AND [Vestiging] = '" & Me.cboVestiging & "'"
    End If
Else
    If Me.cboVestiging & "" <> "" Then
        sFilter = "[Vestiging] = '" & Me.cboVestiging & "'"
    End If
End If

If Me.cboNaam & "" <> "" Then
    If sFilter <> "" Then sFilter = sFilter & " AND "
    sFilter = sFilter & "[Naam] = '" & Me.cboNaam & "'"
    End If
    
 If Me.cboSchadedatum & "" <> "" Then
    If sFilter <> "" Then sFilter = sFilter & " AND "
    sFilter = sFilter & "[Schadedatum] = '" & Me.cboSchadedatum & "'"
    End If
 
   Me.Form.Visible = False


DoCmd.OpenReport stDocName, acViewPreview, , sFilter, OpenArgs:=sFilter

End Sub

Risk
 
Je kunt een datum niet filteren als tekststring; het is zowiezo een getal en geen tekst. Dus daar gaat het om te beginnen al fout. Je moet dus in ieder geval de string niet tussen '' zetten, maar tussen ##.
Een andere fout kan optreden door verschil tussen Nederlandse en Amerikaanse datumnotatie. Want hoe moet de functie de datum 4-9-2013 lezen? Als 4 september, of als 9 april? En dat kun je op de volgende manier opvangen:
Code:
Const strcJetDate = "\#mm\/dd\/yyyy\#"
If Me.cboSchadedatum & "" <> "" Then
    If sFilter <> "" Then sFilter = sFilter & " AND "
    sFilter = sFilter & "[Schadedatum] = " Format(Me.cboSchadedatum, strcJetDate)
End If
Heb je meer datumfilters, dan zet je de constante uiteraard aan het begin van de module.
 
Laatst bewerkt:
Michel,

Dank. Echter, niet werken.

Ik heb de code die er stond vervangen door jou code.
Code:
Function FilterMaken()
Dim sFilter As String


If Me.cboJaar & "" <> "" Then
    sFilter = "[Jaar]=" & Me.cboJaar
    If Me.cboVestiging & "" <> "" Then
        sFilter = sFilter & " AND [Vestiging] = '" & Me.cboVestiging & "'"
    End If
Else
    If Me.cboVestiging & "" <> "" Then
        sFilter = "[Vestiging] = '" & Me.cboVestiging & "'"
    End If
End If

If Me.cboNaam & "" <> "" Then
    If sFilter <> "" Then sFilter = sFilter & " AND "
    sFilter = sFilter & "[Naam] = '" & Me.cboNaam & "'"
End If

Const strcJetDate = "\#mm\/dd\/yyyy\#"
If Me.cboSchadedatum & "" <> "" Then
    If sFilter <> "" Then sFilter = sFilter & " AND "
    sFilter = sFilter & "[Schadedatum] = Format(Me.cboSchadedatum, strcJetDate)"
End If

If sFilter <> "" Then
    Me.Filter = sFilter
    Me.FilterOn = True
Else
    Me.Filter = ""
    Me.FilterOn = False
End If

End Function

Dan krijg ik een melding: Parameterwaarde opgeven Me.cboSchadedatum en ook een Parameterwaarde: strcJetDate

Mis ik een afslag??

Risk
 
Ik heb de velden overgenomen uit je eigen code; als cboSchadedatum niet bestaat, of anders heet, heb je natuurlijk een probleem. De parameter strcJetDate komt vermoedelijk omdat de constante op de verkeerde plek staat. De constante zou ik dan ook naar de bovenkant van de module verplaatsen, zoals ik al aangaf in het eerdere bericht. Of naar het begin van de procedure.
 
En ik zie nu dat er een aanhalingsteken verkeerd staat:

Code:
    sFilter = sFilter & "[Schadedatum] = " & Format(Me.cboSchadedatum, strcJetDate)
 
Laatst bewerkt:
MIchel,

E.e.a. conform gewijzigd. Helaas: Compileerfout, verwacht instructie einde.

Alle variaties in komma's en aanhalingstekens geprobeerd, blijft de compileerfout roepen en in de editor blijft de regel rood.

Groet,

Risk
 
Misschien wat ongeduldig, maar e.e.a. werkt na uren zoeken en proberen nog niet. Mag ik nog wat hulp?

Risk
 
Ik zou dan zeggen: post een voorbeeldje van jouw db, want ik kan op dit moment ook niet veel meer doen dan werkende functies posten. En het mooie daarvan is natuurlijk: ze werken :)
 
Michel,

Gevonden. Eerst dacht ik ja hoor, het zal wel, maar je hebt gelijk. Je post een werkende functie. De fout zat bij mij in een simpele & die ik om wat voor reden niet geplaatst had. Ik had jou code er ingeplakt en die werkte niet sFilter = sFilter & "[Schadedatum] = " & Format(Me.cboSchadedatumstrcJetDate).

Deze wel: sFilter = sFilter & "[Schadedatum] = " & Format(Me.cboSchadedatum, strcJetDate). Een komma spatie ontbrak en dan in combinatie met mijn vergeten & dan wordt het een zooitje. Maar de aanhouder wint, op naar het volgende verbeterpunt.

Was weer leerzaam en dank als altijd. Ik hoop dat anderen er ook weer van hebben mogen leren.

Risk
 
Heb het ook in mijn laatste code aangepast; er was inderdaad een komma weggevallen. Krijg je met al dat sleuren en pleuren ;)
 
Michel,

Daar leer je ook weer van als vragensteller! Uiteindelijk vind je de oplossing, omdat je wat vreemd ziet. Je leest wel makkelijk over codes heen (komma's puntjes etc.) Is mijn altijd blijvende onervarenheid, maar dankzij jou (en andere forumleden, hoewel?) hulp weer een stapje verder met mijn inmiddels steeds groter wordende databasemogelijkheden. Blijft een mooi forum.

Risk
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan