Sorteren op basis van selecties in formulier...

  • Onderwerp starter Onderwerp starter wdeb
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

wdeb

Gebruiker
Lid geworden
8 dec 2013
Berichten
7
Hoi,

Omdat ik eerst 's nachts per ongeluk deze vraag in een oud, ander topic had gesteld, dan nu netjes in een eigen.

Ik gebruik Access 2013 en heb een samenvoegquerry gemaakt die uit vele gelijke, uit excel geimporteerde tabellen enkel die regels heeft gehaald die aan een bepaalde voorwaarde voldeden. Echter, nu wil ik gebruikers deze querry laten gebruiken om hun eigen rapport ervan te maken, maar op basis van hun eigen selectie.

Het gaat om een toetslijst. Ik heb hierbij weging, toetsstof, toetsmoment en vak bijvoorbeeld. Maar niet iedere leerling heeft hetzelfde vakkenpakket, dus hoeft niet de gehele querry te hebben. Ik wil dat ze in een formulier dus enkel hun eigen vakken aanklikken/zetten en dat dan al de items daarvan netjes in de vorm van een rapport weergegeven wordt. En dan uitgeprint kan worden. Of gemaild als pdf oid.

Ik vermoed dat het iets van een selectiequerry moet worden die hieraan ten grondslag ligt. Maar die maken vanuit een tabel en dan daarvan ook direct een rapport maken is mij echt te veel gebleken....ik kom er niet uit.

Ik heb wel H13 nu ook doorgenomen. Heb zelfs in de 2k3 volgens mij de juiste optie gevonden, maar kom er toch niet uit. Ik denk omdat ik nog niet de correcte VBA-kennis heb.

Heeft iemand voor mij een idee/oplossing?

Dank alvast,
Bekijk bijlage PTD V5 minder gegevens, dus kleiner.rar

Wdeb
Bijgevoegd mijn bestand tot nu toe. Wel heb ik, omdat het anders boven de toegestane grootte uit kwam, delen van de jaarplanners verwijderd en al de lege velden die ook geimporteerd werden ook. Omdat ieder vak zijn eigen tabel heeft ingevuld in Excel, heb ik voor deze oplossing van importeren en UNION gekozen. Ik ga ervan uit dat ik komend jaar gewoon een nettere ingevulde DB krijg in Access. Wel weer met per vak een eigen tabel. En vermoedelijk ook per jaarlaag, omdat het in Excel invullen door de collegae als prettig wordt ervaren. Daarbij ga ik het willen uitbreiden met al de jaarlagen, dus ook dat zal dan op een gelijke manier een selectie moeten worden, maar dat is voor later zorg.

EDIT:
Bekijk bijlage PTD V5 minder gegevens, dus kleiner V1.1.rar
Ik heb inmiddels ook echt een formulier gemaakt nav hoofdstuk 8 in de handleiding, maar bij mij wordt er een Macro van gemaakt ipv VBA. En ik krijg hem niet geconverteerd. Daarbij ook niet als ik handmatig de code invoer die in het hoofdstuk staat... Dus kan ik ook niet naar H9, die beloofd dat er meerdere selecties uit de keuzelijst gedaan kunnen worden.
Het formulier heeft beide opties open. Of via selectievakjes, of via keuzelijst. Die laatste lijkt mij het minste werk...:(
 
Laatst bewerkt:
Ik heb inmiddels ook echt een formulier gemaakt nav hoofdstuk 8 in de handleiding, maar bij mij wordt er een Macro van gemaakt ipv VBA. (
Access 2010(13) gebruikt voor standaard handelingen ingebouwde macro's. Wil je VBA macro's hebben, dan moet je (voorlopig) de db als 2003 database opslaan en ontwikkelen. Als alles werkt, kun je hem omzetten naar 2013. Je mist dan in eerste instantie dan wel de opmaak foefjes van 2013, maar ach, bij het ontwikkelen van een database is het uiterlijk wel het laatste waar je je zorgen om maakt :).
Ik zal zometeen naar je db kijken, dus ik kom daar nog op terug.
 
Eerste opmerking (naast die uit het vorige bericht natuurlijk): stop met het maken van losse tabellen, want daarmee graaf je een enorme diepe kuil waar je heel diep (en waarschijnlijk sneller dan je zou willen) in gaat vallen.
Regel 1 van een database: Entiteiten die identiek zijn sla je op in één tabel. En al je tabellen (PTD Biol, PTD BSM, PTD CKV etc) bevatten dezelfde soort gegevens en horen thuis in één tabel. Bovendien heb je al een veld (met de toepasselijke naam [Veld12]) waarin je aangeeft wélk soort vak het is. Dus klus 1 voor jou: alles samenvoegen naar één tabel.
 
Heb ik dat niet gedaan via de query? Want ik krijg het ditmaal allemaal aangeleverd per excelblad met daar iedere keer een volledig ingevuld jaarprogramma (die ik ingedikt heb in de versie die hier nu staat).
Dat is het gevolg van een invoering door een Schoolleiding zonder na te denken over wat er dan daarna mee gedaan moet worden....ik zal zorgen dat dit volgend jaar anders is (ikzelf denk eraan om vanuit een Access-database de tabellen te genereren in excel die dan door de secties ingevuld kunnen worden. Waarbij ik ook de mogelijkheden voor het wijzigen bepaalde velden beperk. Maar dat is toekomstmuziek).

Voor nu heb ik nodig dat de leerlingen snel een overzicht krijgen van al de toetsmomenten die zijzelf gaan ondergaan, met tijdstip etc. Dus ik dacht: Ik gooi de bende in Access en maak daar een zoekformuliertje. Bleek een behoorlijke K-taak te zijn, omdat "slimme" zielen graag de excel-titels etc wijzigigen. Dus dat heb ik allemaal moeten wijzigen bij foutmeldingen in de SQL voor het maken van query. En er is geen rekening mee gehouden dat de gegevens uit de excelfile zouden gaan, die de titel van het vak draagt. Dus moest ik ook nog een kolommetje vak erin brengen. En die heb ik per abuis geen titel meegegeven en ik heb gene zin om weer alles opnieuw te importeren etc en ook de SQL weer te wijzigen, dus vandaar dat ik hem lekker even Veld12 heb laten zijn.

Dat voor de oorzaak van het geheel. Is er niet op basis van de query mogelijk wat ik hebben wil? Want ik heb via die methode de "open" regels uit de geimporteerde excel-bestanden laten halen.

Alvast dank,

Wdeb
 
Een query is geen tabel. En daarnaast: als je een nette genormaliseerde tabel hebt, heb je die UNION query helemaal niet nodig :). En is het oplossen van je vraag ook simpel te doen met de techniek die in de cursus staat.
Dat je de basisgegevens in losse Excel bestanden krijgt aangeleverd doet aan de vraag niks af. Het is zelfs makkelijker, want daarmee kun je prima je brontabel vullen. En daarna gooi je de importtabellen weg. Dus aan de importkant zou ik niet eens zoveel veranderen, dat werkt wel zo. Je probleem is niet:
Bleek een behoorlijke K-taak te zijn, omdat "slimme" zielen graag de excel-titels etc wijzigen.
Al geven ze de velden de namen van hun kinderen, huisdieren en ex-vriendinnen, maakt allemaal niets uit. Zolang jij de velden maar kunt mappen in de import (toevoeg)query. En als de gegevens in de kolommen overeenkomen, is dat geen enkel probleem.
Kortom: keer op de schreden terug nu het nog enigszins kan, maak de db in orde en we praten verder :)
 
Dat is goed...maar even een vraagje tussendoor dan. Is het niet zo dat de eerste stap die ik hierna ga doen dan een query bouwen is die de "lege" velden eruit trekt? Dus dan toch nog op dezelfde query uit kom als nu? En moet ik niet toch nog steeds die laatste kolom toevoegen met de vaknaam erin?

Was namelijk ook al met je eerdere opmerking aan het puzzelen gegaan, dus heb hem omgezet naar 2002/3 en heb inderdaad nu wel de code. Dus toen ging het helemaal goed, behalve dan dat als ik in H9 de Uitgebreid-optie wil om meerdere selecties mogelijk te maken, ik geen resultaten meer krijg....ik heb het gevoel dat ik daar toch echt op de rand van wat ik voor nu wil sta.

Een keuzelijst met de volgende code werkt, maar dan kan ik maar 1 vak selecteren. Dus gaat op Geen goed, maar Enkelvoudig fout...
Private Sub cboZoekLijst_AfterUpdate()
' De record zoeken die overeenkomt met het besturingselement
Me.Filter = "[Veld12] = '" & Me!cboZoekLijst & "'"
Me.FilterOn = True
End Sub

Sorry dat ik toch graag hiermee verder wil om me de tijd te besparen. Ik ga bij de volgende versies (die voor de andere jaarlagen) het zeker wel in 1 tabel gooien.

Wdeb
 
Ik zag in je db dat je op je formulier een Keuzelijst met invoervak hebt gemaakt. Meerdere selecties kun je alleen maken in een Keuzelijst. Dus een Listbox, geen Combobox.
Als je alles in één tabel zet, doe je daar uiteraard alleen de velden in die je nodig hebt. Veld12 heb je altijd nodig, want dat bepaalt de les. Uiteraard geef je die een naam die een beetje logisch is :). Voor alle importtabellen heb je wellicht aparte toevoegqueries nodig als de velden (kolommen in Excel) niet standaard zijn. Is dat wél zo, dan maakt het allemaal niet zoveel uit. Voor een import maakt het niet uit of er lege velden zijn of niet, want je mapt de velden die je nodig hebt aan je hoofdtabel.
Maar om te voorkomen dat je een grote berg queries nodig hebt, kun je ook een import routine bouwen die een Excel bestand opent, dat inleest in een Recordset, en dat vervolgens importeert in je hoofdtabel. Dan boeit het totaal niet meer welke kolomnamen er gebruikt zijn, zolang de kolommen maar kloppen.
 
Ik heb het wel CboZoeklijst genoemd, maar heb er toch echt in de door mij bijwerkte een keuzelijst gezet. En die kan ik op Enkelvoudig zetten, maar dan krijg ik niks meer terug.
Die heb ik echter niet geupload, aangezien we toch niet echt doorgingen met die versie...

Wdeb
 
Ik heb de tabellen samengevoegd met een query en de hele rest eruit gegooid. Daarna weer opnieuw een formulier opgebouwd en dan loop ik toch weer klem op hetzelfde punt. Ik kan wel een keuzelijst maken, maar niet Enkelvoudig. Kan je daarmee helpen?

Daarna moet ik mij trouwens weer druk maken om hoe je het ook alweer via een knop in een rapport kreeg. Dat had ik eerst uitgezocht, omdat ik had verwacht dat dat mijn grootste probleem zou zijn...:confused::confused:

Alvast dank,

Wdeb
Bekijk bijlage PTD V5 2003-1.rar
 
De keuzelijst moet niet op <Geen> staan, maar op <Enkelvoudig> of <Uitgebreid>. En als je dat aanpast, moet je ook de uitleestechniek aanpassen. Een Keuzelijst met één waarde kun je simpel met Value uitlezen, maar dat werkt nu niet meer. Je moet dus de ItemsSelected collectie uitlezen. De code wordt dan:
Code:
Private Sub lstZoekLijst_Click()
Dim itm As Variant, i As Integer
Dim ctl As Control
Dim sFilter As String
    
    Set ctl = Me.lstZoekLijst
        sFilter = ""
        For Each itm In ctl.ItemsSelected
            i = i + 1
            If sFilter <> "" Then sFilter = sFilter & " OR "
            sFilter = sFilter & "[VAK] = """ & ctl.ItemData(itm) & """"
        Next itm
    If i > 0 Then
        Me.Filter = sFilter
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
    
End Sub

En da's toch nét iets anders als:
Code:
Private Sub lstZoekLijst_Click()
    Me.Filter = "[VAK] = '" & Me.lstZoekLijst & "'"
    Me.FilterOn = True
End Sub
 
Je zou niet zeggen dat het anders is....:rolleyes:

Maar, hartelijk dank. Ik heb gekeken of ik de code begrijp en moet ontkennen dat ik het exact inzie. Maar, het werkt en ik ben happy. En ik heb ook het gevoel dat ik het misschien zou kunnen manipuleren.

Wdeb
 
Ik heb gekeken of ik de code begrijp en moet ontkennen dat ik het exact inzie.
Bedoel je dat je volkomen snapt wat er staat? :D. Voor het geval dat niet zo is:
1. Ik zet de keuzelijst eerst in een variabele (ctl); dat hoeft op zich niet, maar ik vind het gewoon handig.
2. Met een lus (FOR .. NEXT) loop ik door alle geselecteerde waarden van de keuzelijst (ItemsSelected).
3. Er zit een teller bij die controleert of er wat gekozen is of niet. Als de waarde 0 is, heb je niks en wil je alles zien, en anders moet er een filter worden gemaakt.
4. De eerste keer dat je een geselecteerd item uitleest is het filter leeg, dus wil je geen OR in het filter hebben, anders wel
5. Het filter wordt gevuld met de tekst [VAK] = ", daarna de geselecteerde keuze (ctl.ItemData(itm)) waarbij itm het indexnummer is van de selectie en afgesloten met een " (het gaat tenslotte om een tekststring)
6. De laatste check is dus op de variabele i. Die kijkt of het filter gevuld is of niet.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan