treeview - tweede formnaam toevoegen bij rapport

Status
Niet open voor verdere reacties.

Dencar77

Gebruiker
Lid geworden
15 mrt 2013
Berichten
131
Dag forumleden,

ik heb een Access 2010 database gemaakt waarbij de navigatie gedaan wordt door een Treeview methode. Niet de makkelijkste wijze, maar het oog wilt ook wat.
Nu kom ik toch met het volgende probleem:

Na het opstarten van de database kom je in het hoofdmenu, dit noem ik FrmStartpagina. Vanuit dit formulier open ik andere formulieren. Het probleem ontstaat wanneer je bijvoorbeeld gaat werken met coderingen (VBA of expressies) en er formulier verwijzingen in komen te staan:

Code:
=IIf([Formulieren]![FrmZoekeninmemo].[FilterOn];[Formulieren]![FrmZoekeninmemo].[Filter])

Bovenstaande code heb ik geplaatst in een rapport in de rapportkoptekstgedeelte. Dit rapport wordt geopend middels een knop op het formulier FrmZoekeninmemo. Hierbij krijg je alle filtercriteria te zien die je in het formulier FrmZoekeninmemo hebt uitgevoerd. Echter dit functioneert niet. Ik zie "#naam?" staan.

Wanneer ik bovenstaande pagina open zonder gebruik te maken van de FrmStartpagina dan zie ik de filtercriteria's wel staan. Het probleem is dus dat hij de eerste formulier erbij moet nemen, FrmStartpagina. Nu dacht ik simpelweg dat op te lossen met :
Code:
=IIf([Formulieren]![FrmStartpagina]![FrmZoekeninmemo].[FilterOn];[Formulieren]![FrmStartpagina]![FrmZoekeninmemo].[Filter])
Maar dat werkt niet. Welke fout maak ik en wat is de oplossing?
 
Laatst bewerkt:
Heb je een veld FilterOn gemaakt op je formulier? Dat is een beschermd woord en een Formuliereigenschap, dus dat is een erg ongelukkige naam.
 
Codering in formulier FrmZoekeninmemo:

Code:
Private Sub cmdFilter_Click()
    Dim strWhere As String                  
    Dim lngLen As Long                      
    Const conJetDate = "\#mm\/dd\/yyyy\#"   
 
    If Not IsNull(Me.TxtVliegtuigtype) Then
        strWhere = strWhere & "([Vliegtuigtype] = """ & Me.TxtVliegtuigtype & """) AND "
    End If
    
    If Not IsNull(Me.TxtLand) Then
        strWhere = strWhere & "([Land] = """ & Me.TxtLand & """) AND "
    End If
    
    If Not IsNull(Me.TxtLuchthaven) Then
        strWhere = strWhere & "([Luchthaven] = """ & Me.TxtLuchthaven & """) AND "
    End If
    
    If Not IsNull(Me.TxtVluchtnummer) Then
        strWhere = strWhere & "([Vluchtnummer] = """ & Me.TxtVluchtnummer & """) AND "
    End If
    
    If Not IsNull(Me.TxtJournaal) Then
        strWhere = strWhere & "([Journaal] Like ""*" & Me.TxtJournaal & "*"") AND "
    End If
    
    If Not IsNull(Me.TxtStartdatum) Then
        strWhere = strWhere & "([Startdatum] >= " & Format(Me.TxtStartdatum, conJetDate) & ") AND "
    End If
    
    If Not IsNull(Me.TxtEinddatum) Then   
        strWhere = strWhere & "([Startdatum] < " & Format(Me.TxtEinddatum + 1, conJetDate) & ") AND "
    End If
    
    lngLen = Len(strWhere) - 5
    If lngLen <= 0 Then   
        MsgBox "Graag een gegeven invoeren aub", vbInformation, "Geen invoer."
    Else                  
        strWhere = Left$(strWhere, lngLen)
     
        Debug.Print strWhere
        
        Me.Filter = strWhere
        Me.FilterOn = True
    End If
End Sub

Private Sub cmdPrintZkmemo_Click()
Dim strRapport As String
    
    strRapport = "RapportZkVluchten"
    If CurrentProject.AllReports(strRapport).IsLoaded Then
        DoCmd.Close acReport, strRapport
    End If
    DoCmd.OpenReport strRapport, acViewPreview, , Me.Filter
End Sub

Private Sub cmdReset_Click()
       Dim ctl As Control
    
    For Each ctl In Me.Section(acHeader).Controls
        Select Case ctl.ControlType
        Case acTextBox, acComboBox
            ctl.Value = Null
        Case acCheckBox
            ctl.Value = False
        End Select
    Next
        Me.FilterOn = False
End Sub

Private Sub Form_BeforeInsert(Cancel As Integer)
    Cancel = True
    MsgBox "U kunt geen nieuwe records toevoegen in het zoekformulier.", vbInformation, "Autorisatie geweigerd."
End Sub

Private Sub Form_Open(Cancel As Integer)
    'Verwijder de ' quote van de navolgende regels wanneer je geen records wilt tonen.
    'Me.Filter = "(False)"
    'Me.FilterOn = True
End Sub

Zoals je merkt heb ik meerdere zoekvelden gemaakt, een filter knop en een wis knop, en dan nog een knop waarmee je het gefilterde in een rapport (RapportZKVluchten) terugziet.
Het rapport heeft geen codering.
Het gedeelte
Code:
=IIf([Formulieren]![FrmZoekeninmemo].[FilterOn];[Formulieren]![FrmZoekeninmemo].[Filter])
is geplaatst in een tekstveld.
 
Ik ben nog steeds verbaasd dat je een Filter als veld gebruikt (is toch een beschermde naam), maar om een filter uit een formulier te halen, kun je rechtstreeks naar de eigenschap verwijzen:
Code:
=IIf(Formulieren![FrmStartpagina]![FrmZoekeninmemo].Form.FilterOn = True;Formulieren![FrmStartpagina]![FrmZoekeninmemo].Form.Filter;"")
 
Bedankt voor de oplossing. Ik weet anders niet hoe ik de keuzes (zoekcriteria's) van een formulier op een rapport kan laten tonen. Het uiterlijk verdient ook geen schoonheidsprijs hiermee, maar ik kan dan wel zien welke woorden gekozen waren. Maar is hier een betere oplossing voor? Dit was na veel internet raadplegen de enige oplossing die ik kon vinden.
 
Je gebruik allerlei velden die je uitleest; die zou je (althans: de gekozen waarden) in een TempVar kunnen zetten. De inhoud van de TempVar lees je dan bij het openen van het rapport weer uit, en zet je vervolgens in je rapport. Heb je alles exact volgens de opmaak die je wilt.
 
Octa, ik heb nog geen tijd gehad om de niet meest correcte variant te testen in de applicatie. Ondertussen ga ik de TempVar variant bestuderen hoe dat werkt en zal daarmee aan de slag gaan.
Wanneer de niet-correcte variant "Filter-on" werkt dan gooi ik deze dicht. En wanneer ik niet uit kom met de TempVar, kan ik dan de vraag in een nieuwe topic beginnen? Ik ben daar wel nog een tijdje zoet mee om het eerst zelf te ontdekken.

Dank je voor je oplossingen.
 
Code:
=IIf(Formulieren![FrmStartpagina]![FrmZoekeninmemo].Form.FilterOn = True;Formulieren![FrmStartpagina]![FrmZoekeninmemo].Form.Filter;"")

Ook bij deze code krijg ik #naam? te zien op het rapport. Ik ben ondertussen nog wat filmpjes op internet aan het doorkijken om de TempVar te regelen in het zoekformulier en in het rapport.
 
Als je uitgezocht ben (en nog steeds gen antwoord hebt gevonden) mag je een voorbeeldje maken, dan heb je waarschijnlijk een uurtje later een oplossing ;).
 
http://www.mijnbestand.nl/Bestand-MQHGHFO4I3WX.accdb

Als het goed is gegaan met uploaden dan kan je de applicatie daar vinden. Met behulp van de treeview systeem kan je naar Zoeken gaan en dan Vluchtgegevens. Als je daar wat willekeurige velden invult en dan op de filterknop drukt dan krijg je je zoekresultaten te zien. En wanneer je dan op de printknop drukt dan zie je een rapport. Bij dat rapport zou ik dus graag de ingevoerde criteria terug willen zien. Op dit moment zie je dan #naam? staan.

Met mijn vorige laptop (overleden door waterschade) kon ik geen bestanden uploaden, dus ik hoop dat het met deze wel lukt.
 
Vreemd genoeg laat hij bij mij precies zien wat je wilt....
 
Hmmm, blijkbaar ben ik eerder vergeten om de knop 'snel reageren te drukken' na een bericht getypt te hebben.
Enfin, waarschijnlijk heb je niet via de FrmStartpagina het formulier FrmZoekenopVlucht geopend.

Als je de applicatie opent dan kom je (los van de splashscreen) op FrmStartpagina terecht. Dit is je hoofdmenu. Vanuit daar kan je het FrmZoekenopVlucht openen. Wanneer je via de routing dan print dan geeft hij dus de foutcode aan.

Wanneer je direct het FrmZoekenopVlucht opent dan krijg je inderdaad de criteria wel te zien, alleen is dit niet de bedoeling van mij.
 
Het is volkomen logisch dat het rapport in het ene geval (los gestart) wel de tekst laat zien, en in het andere geval (via startformulier) niet. Waarom? Omdat je naar een eigenschap vraagt die in beide gevallen op een andere plek staat. Als het formulier zelfstandig wordt geopend, dan moet je op deze manier naar het formulier verwijzen:
Code:
=IIf([Formulieren]![FrmZoekenopVluchten].[FilterOn]=Waar;[Formulieren]![FrmZoekenopVluchten].[Filter];"Geen filter")
Open je het zoekformulier vanuit het startformulier, dan staat er een ander formulier voor. De verwijzing klopt dan niet meer. Die moet dan zo:
Code:
=IIf([Formulieren]![FrmStartpagina]![Treeview_Subform].[Form].[FilterOn]=Waar;[Formulieren]![FrmStartpagina]![Treeview_Subform].[Form].[Filter];"Geen filter")
Dus er kan er nooit meer dan 1 goed werken.
En dat terwijl de oplossing zo simpel is: verwijs naar het filter op het rapport!
Code:
=[Filter]
Meer heb je niet nodig.
 
Ik schaam me heel diep dat de oplossing zo voor de hand lag. Het is opgelost. Wel zal ik nog de tempvar methode bestuderen. Ontzettend bedankt, Octa.
 
En ik schaam me een beetje dat ik líchtelijk overdreef met 'oplossing binnen een uurtje' :) Want deze had ik je al veel eerder kunnen geven. Zat te lang naar je db te loeren, met treeview. Die kom je namelijk niet zo vaak tegen. Al denk ik wel te weten waar je de code vandaan hebt ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan