Selectioe maken blijft een probleem

Status
Niet open voor verdere reacties.

Access2010

Gebruiker
Lid geworden
10 feb 2011
Berichten
116
Forum,
Op een eerdere vraag kreeg ik van Octafish een antwoord. Na gezwoeg in de dezer dagen tropische warmte, is het niet gelukt het bruikbaar te krijgen voor mijn probleem. Selectie zoals ontvangen gaat lukken in een andere context. Mijn probleem(pje) blijft staan

Ik heb een tabel met data. Dat zijn ook velden waarin ik diverse schadecijfers neerzet.
Ik maakte een query voor een formulier
Het formulier haalt de data uit de query en ik maak deze via =Som([Eigen risico]+ etc...[()) tot een formulier waarin men de rendementen schade versus omzet ziet. Zelf rekenen kan ook.

Het werkt perfect, met een maar: ik wil graag de jaren kunnen selecteren. Nu zie je alles wat in de database zit. Via de beroemde parameterquery lukt dat, maar is niet zoals het moet, immers steeds weer afsluiten en niet snel kunnen wisselen.

Een lookup gaat niet. Het jaar staat in de query omschreven als Jaar: Year([Schadedatum]) en dit ziet de lookup niet. #Naam?

Zou ik achter de schadeddatum een jaar invoeren dan komen er 40x 2011 velden voorbij.

Hoe maak ik nu een selectie van het jaar dat ik graag wil zien.

De oplossing anders dan met een parameter in de query, graag jullie hulp.

Onder dankzegging

Access2010
 
Laatst bewerkt:
Volgens mij haal je een paar zaken door elkaar. In je query heb je een veld gemaakt [Jaar] die het jaartal uit de schadedatum haalt. Tot zover prima. Nu wil je op je formulier kunnen filteren op dat veld. En als ik het zo lees, probeer je dat met DLookup te doen. En dat lukt (vrij logisch overigens) niet. Je kunt het wel doen door een Keuzelijst te maken, bijvoorbeeld op dezelfde query die je als bron voor het formulier gebruikt, met deze recordbron:

Code:
SELECT DISTINCT Jaar From qrySchade ORDER BY Jaar

Hierbij ga ik er in het voorbeeld even van uit dat je bronquery qrySchade heet; die naam zul je dus moeten veranderen. Wat deze query doet, is uit je schade tabel (query) alle jaartallen ophalen die gebruikt zijn. Naarmate de jaren vorderen, wordt de lijst dus automatisch langer. Uit de keuzelijst (die ik voor het voorbeeld even cboJaar noem) kies je een jaartal. En dat jaartal gebruik je in de gebeurtenis <Na bijwerken> om het formulier op te filteren.

Die code ziet er dan zo uit:

Code:
Private Sub cboJaar_AfterUpdate()
    Me.Filter = "[Jaar]=" & Me.cboJaar
    Me.FilterOn = True
End Sub
 
Michel,

Dank zoals altijd voor je snelle reactie.

Inderdaad niet zo slim om Lookup te verwarren met keuzelijst. De warmte denk ik.

Laat ik na wat vruchteloos gerommel vaststellen: Ik ben hier te dom voor. Zelfkennis daar ontbreekt het mij niet aan.

Ik maak een keuzelijst met invoervak met de wizzard. Die gaat allerhande vragen door en dan moet ik ergens de code plaatsen. SELECT DISTINCT Jaar From qrySchade ORDER BY Jaar
Zou niet weten waar. In eigenschappen:rijbron?? Geen idee.

Dan wordt het nog spannender:

Mijn query heet Query 1. Deze naam moet worden veranderd door er gewoon Query 2 van te maken? Kan immers de tabel die hem dan zal voeden blijft gelijk. maar dan blijven ook de schadedata groeien.

Hoe selecteer ik dan uit de keuzelijst een jaartal. Als ik kijk in eigenschappen staat er na de fabricage van een keuzelijst met invoervak een macro gemaakt door Access. Die moet ik vervangen met de code Private sub etc....?

Mijn probleem: visueel ingesteld en codes?? Helaas een ramp.


Hoe dikker het boek en hoe meer er inmiddels gemaakt des te minder ik weet, blijkt.

HELP!!! Er is koffie en ruimte zat achter mijn bureau. voorbeeldje?

Acces2010
 
Laten we even een stapje terug doen ;)
Je maakt een keuzelijst met de wizard: prima! Die stelt inderdaad allerlei vragen, zoals de vraag: ga je zelf typen, of gebruik je een tabel/query? In jouw geval lijkt mij dat simpel: de eerste optie. Jouw query heet blijkbaar Query1 (niet de meest herkenbare naam ;) ) dus die gebruik je als basis. Je hebt alleen het veld Jaar nodig, dus dat is ook simpel. Vervolgens maak je de query op de normale manier af. Die query zal er dan ongeveer zo uit zien, en staat inderdaad bij de Rijbron:
Code:
SELECT [Query1].[Jaar] FROM [Query1] ORDER BY [Jaar];

Daarmee is hij niet echt bruikbaar, omdat hij net zoveel jaargetallen laat zien als er records zijn. Je wilt (logisch) elk jaar maar één keer zien. Daarom typ je het woord DISTINCT achter SELECT, en dan krijg je dus mijn voorbeeldje:
Code:
SELECT DISTINCT [Jaar] FROM [Query1] ORDER BY [Jaar];

Als er bij jou een macro is gemaakt, dan zou ik die inderdaad verwijderen, want je hebt toch wel VBA nodig om het netjes werkend te krijgen. Misschien kun je, als je de keuzelijst cboJaar hebt genoemd (<Eigenschappen>, tabblad <Overige>, <Naam>) de code die ik eerder heb gepost plakken in het VBA scherm, dat je kunt openen met <Alt>+<F11>. Met een beetje mazzel koppelt hij de code dan zelf aan de keuzelijst. Anders moet je op de regel <Na bijwerken> klikken op het tabblad <Gebeurtenis>, en op de knop met de drie puntjes. Kies vervolgens <Gebeurtenisprocedure>. Je hoeft dan alleen de twee regels Filter en FilterOn te kopieren/plakken.
 
Michel,

Dank je. Moet toch lukken. Ja die Query 1 is altijd blijven hangen qua naam en ik ben
aan gewend geraakt.

Uitslag van the battle of de Keuzelijst volgt.

Access2010
 
Michel,

IK heb gemaakt:

Keuzelijst met invoervak. Eerste optie van de 3 aangeklikt. De query1 gekozen en daar verder gegaan op het veld jaar. Keuzelijst opgeslagen als cboJaar

Eigenschappen geopend:
In de rijbron de code: SELECT DISTINCT [Jaar] FROM [Query1] ORDER BY [Jaar]; geplakt

Bij gebeurtenis:
Private Sub cboJaar_AfterUpdate()
Me.Filter = "[Jaar]=" & Me.cboJaar
Me.FilterOn = True
End Sub

Resultaat: Keuzelijst met de jaren 2009 2010 en 2011. Ik blij!!

Helaas er wordt niets geselecteerd.

Sta voor de streep, maar helaas ik stop.

Blijft de vraag waarom selecteert dat ding niet.

Access2010
 
Zou ik zo niet weten; ik heb het voorbeeld letterlijk voorgebouwd in een eigen db, en daar werkt-ie prima... Zet er anders nog een regel bij: Me.Requery. Deze komt onder Me.FilterOn=True
 
Michel,

HET WERKT!!!! GENIAALL!!!!!! Ik ben blij. Wat ik fout deed?? Geen idee, maar alles opnieuw gedaan en plots, bingo.

Is dit ook over twee velden te genereren? Bijv: jaar en chauffeur in een ander formulier.

Heb bu de smaak van de overwinning te pakken.

Voel me net Cavendish na verloren sprints uiteindelijk de zege. Met dank aan een uitstekend epiloot op de laatste kilometer!!

Michel, dank.
 
Te vroeg gejuigd. Wekrt wel in het formulier. Maar bij opstarten database krijg ik een fout Uiroepteken Kan het volgende bestand niet vinden: en dan blanco.

Wat een klus.

Access2010
 
Access heeft last van de warmte denk ik.

Werkt, was te voorbarig. Alles in de backup geplakt.

Access2010
 
Je moet de pc minder kruipolie geven, of zelf minder drinken :D
 
Dank voor de tip, de PC is een zakelijke PC en razend snel. De bestuurder drinkt niet. Besta bij de glorie van mijn rijbewijs.

Overigens hoe het opgelost is een raadsel, is net als met ziektes. Soms zo over.

Blijft mijn vraag over kan ik dit op deze manier combineren met 2 velden: jaar en chauffeur. (of iets anders)

Dank

Access 2010
 
In beginsel werkt het op dezelfde manier, alleen zul je het filter moeten gaan combineren. En daarbij zul je waarschijnlijk ook nog een check willen op de status of er één of twee keuzes zijn gemaakt. Dus ik zou daar een aparte functie voor maken, die het filter maakt en checkt.

Je krijgt dan zoiets:

Code:
Private Sub cboJaar_AfterUpdate()
    Call FilterMaken
End Sub

Code:
Private Sub cboChauffeur_AfterUpdate()
    Call FilterMaken
End Sub

Code:
Function FilterMaken()
Dim sFilter As String

    If Me.cboJaar & "" <> "" Then
        sFilter = "[Jaar]=" & Me.cboJaar
        If Me.cboChauffeur & "" <> "" Then
            sFilter = sFilter & " AND [Chauffeur] = '" & Me.cboChauffeur & "'"
        End If
    Else
        If Me.cboChauffeur & "" <> "" Then
            sFilter = "[Chauffeur] = '" & Me.cboChauffeur & "'"
    End If
    
    If sFilter <> "" Then
        Me.Filter = "[Jaar]=" & Me.cboJaar
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If

End Function
 
Michel,

Ga het proberen, nu even naar het strand. Genieten van het feit dat wat ik wilde werkt.

Perfect forum, blijf ik zeggen. Een nadeel: door alles wat je leest wil je steeds meer.

Dank voor alle hulp.

Access2010
 
Michel,

Nieuwe dag, nieuwe wensen.

Als ik verder ga stoeien met jou laatste oplossing dan zal in de rijbron iets moeten staan zoals in de eerste oplossing:

SELECT DISTINCT [Jaar] FROM [Query1] ORDER BY [Jaar];

Als ik daar de chauffeur of afdeling bijzet wordt de code dan: SELECT DISTINCT [Jaar] [Chauffeur] FROM [Query1] ORDER BY [Jaar];

Met dank,

Access2010
 
Ik zou voor de Chauffeurs een aparte keuzelijst maken. Daar is mijn oplossing ook op gebaseerd.
 
Ik heb nog een vraagje. Als het Keuzeveld scherm zich opent dan is het selectievakje blanco. Kan daar meteen een jaar in?

Access2010
 
Ja, bij de gebeurtenis <Bij Aanwijzen> van het formulier. Daar zet je dan:
Code:
Me.cboKeuzelijst.Value=Year(Date)
Nog wel uiteraard de naam van de keuzelijst aanpassen...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan