Rapport openen met condities

Status
Niet open voor verdere reacties.

Scallebe

Gebruiker
Lid geworden
29 okt 2014
Berichten
528
Goede morgen ontwikkelaars,

Ik probeer een rapport te openen met 2 voorwaarden.

Code:
DoCmd.OpenReport "Alle Dossiers", acViewPreview, , "[NN] =" & NN And "[Datum TA]=" & Combo158

Met alleen NN werkt het zonder probleem.

Wanneer ik het datumveld als voorwaarde toevoeg dan krijg ik de fout melding : Fout 13 tijdens uitvoering: typen komen niet met elkaar overeen

Ik heb al geprobeerd de [Datum TA] als tekst als numeriek en als datum te definiëren, telkens met dezelfde foutmelding.

Ik heb dan ook geprobeerd om waarde van de combobox naar een tekstveld (onzichtbaar in mijn formulier) te sturen en dan naar dat veld te verwijzen maar steeds met dezelfde foutmelding.

Opzoeking op het web naar de foutmelding 13 maken mij echt niet wijzer.


Wat doe ik fout?


Greetz

Pascal
 
Geen idee wat je fout doet, omdat je niet vertelt wat je uit die combobox haalt. Ik word altijd achterdochtig als mensen een combobox gebruiken om een datum te filteren. Dat werkt uiteraard alleen als de uitkomst van die combobox ook een datum is.
 
Octafish,

De combobox filtert inderdaad het formulier op een datum veld en laat mij dus uiteraard enkel de records zien die voldoen aan deze datum.

Met volgende code :

Code:
Private Sub Combo158_AfterUpdate()
Dim strFilter As String
strFilter = ""

If Me!Combo158 & vbNullStr <> vbNullStr Then
    strFilter = strFilter & "AND [Datum TA] Like '*" & Me.Combo158 & "'"
End If

'End of combobox checks
If strFilter <> "" Then
'Cleaning string, trimming off beginning "AND"
    Me.Filter = Mid(strFilter, 4)
    Me.FilterOn = True
Else
    Me.Filter = ""
    Me.FilterOn = False
End If

End Sub

Het is mij een raadsel waarom deze combobox niet kan gebruikt worden als criteria. :confused:
 
De combobox filtert inderdaad het formulier op een datum veld en laat mij dus uiteraard enkel de records zien die voldoen aan deze datum.
Ik vind het onbegrijpelijk dat mensen een keuzelijst gebruiken om een datum te filteren, en niet een tekstveld met een DatePicker. Is zoveel makkelijker! Tenzij het gaat om een selectie van daadwerkelijk gebruikte datums, en de keuze daardoor beperkt is. Zelfs dan nog gebruik ik een (eigen) datumformulier waar je dan alleen de geldige datums kan aanklikken.
Maar goed, als de keuzelijst inderdaad datums bevat (je laat nog steeds de rijbron niet zien, dus daar kan ik verder niks van zeggen) dan is het wel degelijk mogelijk om op een datum te filteren. Maar dus niet zoals jij dat doet, want je kunt een datumveld nooit als een tekstveld filteren.

Waarom mensen nog steeds de AfterUpdate gebruiken op een keuzelijst, en niet de Click, is mij overigens ook dus een raadsel:). Net als het gebruik van het uitroepteken i.p.v. de punt.

Code:
Private Sub Combo158_Click()
Dim strFilter As String

    If Me.Combo158.Value  <> vbNullStr Then
        strFilter = [Datum TA] = CDate(" & CDbl(Me.Combo158.Value) & ")"
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
End Sub
Code op voorhand uitbreiden met extra tekst (AND) en die later weghalen? Zet tekst er alleen bij wanneer dat nodig is.

Gebruik geen overbodige code die je niet nodig hebt. Een variabele declareren hoef je niet eerst leeg te maken, hij is al leeg. Dat soort zaken :).
 
Octafish,

Bedankt voor je reactie :thumb:


Ik heb de code voor de combo158_AfterUpdate() gevonden op het web.... :rolleyes: Die werkte voor mij en ik was dus al blij....


Ik heb nu uw wijziging doorgevoerd naar click() maar 1 lijn komt rood te staan :

Code:
strFilter = [Datum TA] = CDate(" & CDbl(Me.Combo158.Value) & ")"

Zit daar een foutje in? Ik vermoed de laatste <">

Ik heb het weggelaten en ik krijg nu dezelfde foutmelding 13... :(


Mijn formulier is gebaseerd op een Query.

De combobox gaat zijn waarden ook gaan zoeken in dezelfde Query.

Mijn datum veld [Datum TA] is een daadwerkelijk gebruikte datum.

Ik wil dus mijn formulier filteren op basis van mijn Combobox (werkt perfect) en dit dus in een rapport zetten en dan wringt het :confused:

Ik heb geprobeerd met een nieuwe Query aan te maken, de twee criteria ingevuld in de betreffende velden, verwijzend naar de velden in mijn formulier en ik krijg de gewenste informatie.

De criteria bepalen in VBA geeft de error...

Het is dus wel de bedoeling om met rapport en Query te werken, gefilterd met VBA

Alle verschillende mogelijkheden die ik heb geformuleerd werken perfect, behalve die met de datum...

Ik weet het niet meer.

:confused::confused:

Greetz
 
OctaFish,

Soms heb ik de slechte gewoonte om mijn velden foutief te benoemen, spaties te gebruiken, … Ik moet dat echt afleren :confused:

Je hebt mij daar ook al op gewezen in het verleden :)

Nu heb ik deze fouten rechtgezet, ook omdat de engelstalige collega's op AccessWorld my daar ook nog eens op gewezen hebben.

https://www.access-programmers.co.uk/forums/showthread.php?p=1637120#post1637120

Zij zijn, na alle verbeteringen, gekomen met volgende werkende code :

Code:
DoCmd.OpenReport "AlleDossiers", acViewPreview, , "NN =" & Me.NN & " And DatumTA =#" & Format(CDate([DatumTA]), "mm/dd/yyyy") & "#"

Uw code voor combobox_click() geeft ook de foutcode 13... :(

Hier is de aangepaste code :

Code:
Private Sub cboDatumTA_click()
Dim strFilter As String

    If Me.cboDatumTA.Value <> vbNullStr Then
        strFilter = [DatumTA] = CDate(" & CDbl(Me.cboDatumTA.Value) & ")
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
End Sub

Ik vermoed dat het iets zal te maken hebben met de format? maar hoe ik die dan moet aanpassen:eek:



In ieder geval, bedankt voor uw deskundige input :thumb::thumb:

Greetz

Pascal
 
Laatst bewerkt:
Tja, mijn code werkt perfect, nooit problemen mee gehad. Jouw variant vind ik a) te ingewikkeld, en b) te omslachtig. Hij is noodzakelijk omdat VBA gebruik maakt van Amerikaanse datumnotatie, en jij (en ik) de Nederlandse gebruiken. Derhalve wordt een datum als 9-7-2019 verkeerd geïnterpreteerd. Je krijgt dan niet 9 juli te zien, maar 7 september. Vandaar dat ik datums omzet naar een getal (met CDbl) en in de filterstring het verkregen getal weer terugzet naar een datum. Met CDate. Zoals gezegd: werkt in al mijn databases als een tierelier. Mijn code is dus korter, bevat geen rare noodzakelijke tekens (#) en is echt foutloos :).
Als het bij jou niet werkt, werk je niet met correcte datumvelden. Veel meer kan ik er niet van maken.
 
Er zit natuurlijk wel een typfoutje in:
Code:
        strFilter = "[DatumTA] = CDate(" & CDbl(Me.cboDatumTA.Value) & ")"
 
Octafish,

Ik heb het foutje verbeterd en het geeft geen fout 13 meer :thumb:

Al mijn datumvelden hebben de datum format zoals ik die kan kiezen bij de opbouw van mijn tabel. Ik gebruik bv geen tekstveld voor een datum... ik weet dus niet waar ik daar een fout in zou maken.

Hoe zou jij het rapport dan openen als je gebruik maat van de datum omzetting? (CDbl & CDate)


Thanks

Greetz

Pascal
 
Ik zou zonder meer geen filter gebruiken, maar de bron van het rapport aanpassen. Ik doe dat door aan mijn rapporten een 'vaste tijdelijke' query te hangen, die ik voor alle rapporten gebruik. Die noem ik dan bijvoorbeeld qTempRap. Op het formulier waarop ik het rapport open, en dus de data filter, stel ik het filter samen, en dat combineer ik met de bron van de complete recordset van het rapport. Dus ik maak het rapport op de totale query/tabel, en vervolgens kopieer ik die SQL naar het formulier. Daarna bewerk ik de SQL door het filter er aan toe te voegen.

Code:
Dim qTmp As QueryDef
        Set qTmp = CurrentDb.QueryDefs("qTempRap")
        strSQL = "SELECT " & sVelden_Lijst & "From qDossiers WHERE ([DatumTA] = CDate(" & CDbl(Me.cboDatumTA.Value) & ")) ORDER BY [DatumTA] DESC;"
        qTmp.SQL = strSQL

Als voorbeeldcode :). Het rapport krijgt dus steeds een andere (vaste) query als basis, en dat houdt tevens in dat je het laatste rapport altijd kunt heropenen zonder het filter opnieuw in te stellen. Want dat zit hard in de query geprogrammeerd.
 
OctaFish,

Ik weet niet of het van de temperatuur is maar ik begin plots harder te zweten... :eek:

Ik zal jouw uitleg en oplossing eens op een frissere dag bestuderen en uitproberen :D

Voorlopig ga ik werken met hetgeen ik heb. Het is misschien niet de ideale manier, ik ben er van overtuigd dat het veel eenvoudiger kan...

Alvast bedankt voor de deskundige hulp en ik kom er later nog zeker op terug.

Greetz

Pascal
 
Ik heb regelmatig oplossingen gepost met QueryDefs, dus die kun je makkelijk vinden. En anders maken we er een voor jou :).
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan