vernieuwen van keuzelijsten in subformulieren en navigeren

Status
Niet open voor verdere reacties.

JohanRVT

Gebruiker
Lid geworden
2 mrt 2011
Berichten
555
Beste groep, in bijlage een gestripte voorbeeld DB personeel waar ik graag 2 dingen zou voor elkaar krijgen:
1. Na het kiezen van een personeelslid in de keuzelijsten bovenaan de Form "personeelfiche" halen de keuzelijsten in de subformulieren (bv contracten, kinderen, ziekteperiodes, etc... die te vinden zijn in een aantal tabbladen) hun data correct op; nadat er echter een ander personeelslid werd gekozen blijven de keuzelijsten in de subformulieren hun data ophalen van het vorig personeelslid; de queries worden niet vernieuwd. Heb al een aantal dingen geprobeerd met requery en focus plaatsen maar ik krijg het niet voor elkaar.
2. Bij dubbelklikken op een record in de lijsten aan de buitenzijde of onderzijde van ieder tabblad van de Form "personeelfiche" gaat de focus naar de juiste record van het personeelslid maar niet naar de juiste record in het subformulier. Het dubbelklikken in de lijsten in de subformulieren zelf heb ik uitgeschakeld om dezelfde reden.

Het zou veel makkelijker werken zijn mochten beide functies correct werken. Iemand een idee of voorbeeld hoe dat wel voor mekaar te krijgen?
Merci
 

Bijlagen

Kun je een voorbeeldje geven van wat we zouden moeten zien? De datatabellen zijn veel te vol, en daarom zeggen de gegevens mij helemaal niks. Ik zou bijvoorbeeld verwachten dat de keuzelijst Contracten op het tabblad Contracten de bij dat personeelsnummer horende contracten zou laten zien. Niet dus: de lijst laat àlle contracten zien. Dus ik heb geen idee waar ik naar moet kijken, en welke gegevens (ik zie er zat wèl veranderen) dan verkeerd gaan. Dus graag met naam en toenaam: welk tabblad, welk veld, welke keuzelijst etc.
 
En nog wat: geen enkele relatie in het Relaties venster deugt. Niet alleen heb je er allemaal Outer Joins van gemaakt (waarom??), er is geen Referentiële integriteit mogelijk, dus je kunt net zo goed [Burgelijke stand] koppelen aan [Percentage], of [Werkregime] aan [GSM]. Die relaties hebben namelijk net zoveel waarde als wat je nu hebt (helemaal niks dus).
 
Die relaties waren vroeger goed maar als ik een oude DB update naar een nieuwe versie voeg ik via VBA queries gewoon de data van al de geïmporteerde tabellen toe aan de nieuwe tabelen via de importwizard van Ms Access. Normaal neemt die de relaties ook mee maar dat moet eerder ergens niet gebeurd zijn waardoor deze relaties zijn verloren gegaan en in die verknipte DB heb ik er al helemaal geen gelegd. En uit eerder posts heb je wel al gemerkt dat ik soms rare verbanden leg om tot iets te komen waardoor ik mezelf natuurlijk ergens vastrijdt.

En om op je vraag om een voorbeeld van wat het programma niet doet bij bv contracten.
Stel dat je het programma opent en direct naar tabblad contracten gaat; dan zie je in de rechter lijst inderdaad alle contracten. Als je dubbelklikt in die lijst op het bovenste met datum 15/01/2013 tot 10/02/2013 dan ga je netjes bij "contracten" contract ID 2547 zien van Def Chra. Open je dan gewoon even op de keuzelijst "zoek op datum" in dat tabblad dan zie je dat deze werkneemster 3 contracten heeft. daar doen we nu niets mee. Stel dat je dan in de keuzelijst "zoek" bovenaan in de koptekst van het formulier nu een andere werknemer zoekt bv Baer Lie dan blijft op het tablad contracten alles staan op Def Chra, je mag vanalles klikken en doen dat blijft zo. Dubbelklik je echter op de onderste lijst in het tabblad contracten op bv Host Ell dan ga je het bewuste contract van Host Ell netjes krijgen. Echter als je dan terug in de keuzelijst "zoek op datum" in het tabblad contract opent dan zie je nog altijd de drie contracten staan van Def Chra. Kan je nog volgen?
De tabbladen en de keuzelijsten in die tabbladen worden dus én niet ververst en het dubbelklikken op de lijsten gaat niet naar het juiste record. Tevens wordt de keuzelijst bovenaan buiten speol gezet als je op een lijst in de tabbladen hebt gedubbelklikt.
Dit leidt natuurlijk tot fouten. Nu lossen ze het op door hun cursor in een keuzelijst van een tabblad te zetten en even F5 te duwen waardoor de keuzelijst wel netjes wordt ververst

Wat dubbelklikken op de lijsten in de tabbladen zelf betreft; bij bv "afwezigheid"heb je in de lijst onderaan bovenaan Verh Dor staan met als datum 5/02/2013. als je daar op dubbelklikt ga je netjes naar haar records in het tabblad en zie je in de lijst dat ze 20 records heeft. Nu heb ik die lijst vergrendeld en staat er een requery achter de "bij klikken gebeurtenis" (ik heb al vanalles achter het dubbeklikken geprobeerd maar het lukt me niet) maar het zou moeten zo werken als in de andere lijsten dat je naar de juiste afwezigheidperiode gaat in het tabblad zelf bij dubbeklikken.
 
Ik vind de db zo gruwelijk ingewikkeld dat ik met een grote boog om de meeste zaken heenloop, maar de keuzelijst in het Contracten subformulier doet het nu. Ik heb, om je even te laten zien wat er zoal mankeert aan je db, de dubbelklik vervangen door een Klik event. Kijk maar eens wat daar anders aan is. En wellicht ga je je dan een beetje achter de oren krabben ;)
 

Bijlagen

Ik vind de db zo gruwelijk ingewikkeld dat ik met een grote boog om de meeste zaken heenloop, maar de keuzelijst in het Contracten subformulier doet het nu. Ik heb, om je even te laten zien wat er zoal mankeert aan je db, de dubbelklik vervangen door een Klik event. Kijk maar eens wat daar anders aan is. En wellicht ga je je dan een beetje achter de oren krabben ;)
Belangrijkste bezwaar: je denkt zóó gruwelijk ingewikkeld...
 
Michel,
Ja, gruwelijk denken is denk ik een gevolg van het feit dat ik totaal geen opleiding hebt genoten of een voorgeschiedenis heb en dus van normalisering en zo nog meer niets heb gehoord en het moet stellen met knip-en plakwerk en error-try-till-it-works. (cfr code om een Belgische identiteitskaart uit te lezen) Het zijn oude DB's van voorgangers waar er reeds jaren van alles vanuit Word, EXcel, etc... aan gekoppeld is zodat ik er niet veel mag aan wijzigen of er hangen dames van verschillende rusthuizen aan de telefoon :confused:
Je hebt indertijd al 's gezegd in de trend dat er veel wegen naar Rome leiden, gelukkig maar. Er was hier in België bij Syntra West welgeteld één cursus voor VBA maar die is dan op 't laatst afgeblazen wegens te weinig inschrijvingen.
Ik zal vanmiddag even achter mijn oren krabben :)

NB: ze hebben sinds enige tijd nieuwe ID's in omloop in België waar er nu maar één voornaam in staat ipv de twee voornamen vroeger. Moet dat terug dus herbekijken, maar is voor andere thread.
Weeral bedankt voor de tijd en moeite die je er wilt insteken.....
 
Michel, even je versie V2 bekeken en behoudens vergissing zie ik dat je bij het tabblad "Contract" een vakje met het "nummer contract" (het personeelsnummer dus) hebt toegevoegd en de procedure ipv on dblclick op de lijst rechts op on click hebt gebracht (onze dames dubbelklikken op zowat alles dus die gaan blijven dubbelklikken).
Je wordt dan naar het juiste personeeslid gebracht maar nog niet op het juiste contract_ID van dat persooneelslid en aangezien de keuzelijsten niet verversen zijn we nog niet echter verder.

Verder voor het verversen van die keuzelijsten; moeten we telkens bv niet de focus verplaatsen van het ene tabblad naar het andere met als tussenstap de hoofdpagina om al die keuzelijsten geforceerd te verversen? Of gaat dat weer gruwelijk ingewikkeld zijn :-) Bv colde achter de keuzelijst bovenaan in de personeelfiche
Code:
Private Sub KzlPersoneelslid_AfterUpdate()
' De record zoeken die overeenkomt met het besturingselement
Dim rs As Object
    
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[personeelsnummer] = " & Str(Nz(Me![KzlPersoneelslid], 0))
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
    Me.Kzlpersoneelsnummer = ""
    Me.Sub_contracten.Requery
    Me.Sub_kinderen.Requery
    Me.Sub_ziekte.Requery
    Me.Sub_ODV.Requery
    Me.Sub_Moederschapsbescherming.Requery
    Me.Sub_Tijdskrediet.Requery
    Me.Sub_BP.Requery
    Me.Sub_Maribel.Requery
    Me.Sub_Kostenplaats.Requery
    rs.Close

End Sub
 
Ik heb alleen het bijwerken van de keuzelijst [KzlContractID] gefixed; de werking van de keuzelijst heb ik verder met rust gelaten. Ik heb een Click event gebruikt om je eigen code niet in de weg te zitten. Als je een contract kiest uit de keuzelijst, krijg je netjes de juiste gegevens van dat contract te zien, dus ik snap niet helemaal wat je bedoelt met
Je wordt dan naar het juiste personeeslid gebracht maar nog niet op het juiste contract_ID van dat persooneelslid en aangezien de keuzelijsten niet verversen zijn we nog niet echter verder.
Wat mij betreft doet de keuzelijst het nu. Ik neem aan dat je dat verdere aanpassingen daarop zelf wel kunt maken :)
Het Contractnummer heb ik zichtbaar gemaakt voor controle redenen; een externe db doorgronden is al lastig genoeg zonder onzichtbare referentieveldjes, en daarom heb ik die weer zichtbaar gemaakt.
 
Een personeelid heeft maar één personeelsnummer maar soms meerdere contracten (dus meerdere Contract_id's. Als je nu op die bewuste rechterlijst klikt (of dubbelklikt) kom je wel uit bij het bewuste personeelslid maar niet rechtstreeks op het juist contract in het tabblad contract.
 
Hij pakt het eerste contract dat bij een persooonID hoort, en die lijst ververst. Ik zie ook netjes de contractID's veranderen, dus ik snap echt je probleem niet. Hooguit dat er een verkeerde contractID actief is, maar dat is een kwestie van de onderliggende query aanpassen.
 
De queries zijn goed maar verversen zich niet als je wat heen en weer (dubbel)klikt links en rechts op lijsten en keuzelijsten in de respectievelijke (sub)formulieren
 
Stapje dichter

heb een public sub bijgeplaatst die ik kan "callen" van waar het nodig is
Nu nog vinden hoe met een click vanuit een lijst op de subform naar de juiste record in die subform te gaan (of een click op een list op de mainform die naar die juiste record gaan in de subform) en we zijn er
Code:
Public Sub KeuzelijstRefresh()
On Error GoTo Err_KeuzelijstRefresh
    Forms![Personeelfiche]![Sub contracten].Form.Requery
    Forms!Personeelfiche.Form![Sub contracten].Form!KzlContractID.Requery
    Forms![Personeelfiche]![Sub kinderen].Form.Requery
    Forms!Personeelfiche.Form![Sub kinderen].Form!Kzlkinderen.Requery
    Forms!Personeelfiche.Form![Sub ziekte].Form.Requery
    Forms!Personeelfiche.Form![Sub ziekte].Form!KzlAfwezigheidID.Requery
    Forms!Personeelfiche.Form![Sub ODV].Form.Requery
    Forms!Personeelfiche.Form![Sub ODV].Form!KzlODVID.Requery
    Forms!Personeelfiche.Form![Sub Moederschapsbescherming].Form.Requery
    Forms!Personeelfiche.Form![Sub Moederschapsbescherming].Form!KzlMBID.Requery
    Forms!Personeelfiche.Form![Sub Tijdskrediet].Form.Requery
    Forms!Personeelfiche.Form![Sub Tijdskrediet].Form!KzlTijdskredietID.Requery
    Forms!Personeelfiche.Form![Sub BP].Form.Requery
    Forms!Personeelfiche.Form![Sub BP].Form!KzlBPID.Requery
    Forms!Personeelfiche.Form![Sub Maribel].Form.Requery
    Forms!Personeelfiche.Form![Sub Maribel].Form!KzlMaribelperiode.Requery
    Forms!Personeelfiche.Form![Sub_Kostenplaats].Form.Requery
    Forms!Personeelfiche.Form![Sub_Kostenplaats].Form!KzlKostenplaatsID.Requery
Exit_KeuzelijstRefresh:
    Exit Sub

Err_KeuzelijstRefresh:
    MsgBox Err.Description
    Resume Exit_KeuzelijstRefresh
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan