Refresh/ReQuery tabel

Status
Niet open voor verdere reacties.

obiku

Gebruiker
Lid geworden
25 jul 2004
Berichten
60
Hoi,

Ik heb een database gemaakt waarmee ik samen met een aantal collega's werk. Deze database heeft een front en een backend. Omdat ik nog bezig ben met het verder ontwikkelen van de database, maar men er toch wel al graag gebruik van wil maken, heb ik er ook een log systeempje ingemaakt.
Zodra er iemand inlogt, uitlogt, of een handeling uitvoert worden de log gegevens in een tabel opgeslagen.
Mijn database bestaat uit een aantal tabbladen waarin gewerkt kan worden. Ik als eigenaar kan een extra tabblad zien, waarin een subformulier staat waarin de log tabel wordt weergegeven.

Ik heb nu veel dingen geprobeerd, maar ik krijg het niet voor elkaar om, zodra ik het log tabblad aanklik, de meest recente gegevens in de tabel te zien.

Ik heb in tabblad_click() event een docmd.requery geprobeerd, maar dan krijg ik nog steeds niet alle gegevens in de tabel te zien.
Ook heb ik een me.refresh event geprobeerd, maar ook dat geeft niet alle gegevens. Pas als ik bijvoorbeeld de tabel weer laat sorteren op datum, dan zie ik ook de laatste info.
Dus daarna dacht ik dat het zou helpen om na de requery of refresh een .orderby laten uitvoeren in vba. Maar ook dat gaf niet het gewenste resultaat.

Het allermooiste zou zijn dat wanneer ik de tabel op mijn scherm open heb, en een andere collega voert wat uit, dat ik dan direct de bij geschreven log regel zie.

B.t.w. de tabel met de loggegevens staat uiteraard in de backend.

Als het bovenstaande niet mogelijk is, dan zou ik het eventueel ook met een refresh click event willen oplossen.
Wie weet raad.
 
Hoi,

Waarom probeer je niet een requery/refresh op het hoofdformulier. Dat heb ik zelf namelijk ook toegepast, bij mij werkte de me.refresh het beste op het Bij_activeren gebeurtenis op het hoofdformulier. Vervolgens worden alle subformulieren op de tabbladen gerefreshed. Wat jij wil bereiken (dat je collega's iets invoeren en jij het real-time kunt zien), is denk ik het beste te realiseren met een On timer event, waarbij je na iedere 50000 milliseconden (is bijv. 5 sec) een me.refresh uitvoert...

Hopelijk heb ik je hiermee iets op weg geholpen..

Succes :thumb:
 
Helaas.....,

Ik heb in het activate event van het hoofdform een Me.Refresh gezet, als ik dan direct naar het log tabblad ga zie ik niet de login regel die vanuit het login form in de logtabel is geplaatst.

Eerst wordt er een login form getoond, die je dan doorstuurd naar het MainForm.

Ook heb ik in het open_form event van het mainform een regel met Me.Timerinterval =50000 gezet, en in het timer event een Me.Refresh. Ook dan zie ik na 5 seconde geen verandering in de tabel....
 
Heb je een subformulier op het tabblad Log staan? De Requery moet dan op het subformulier worden uitgevoerd, niet op het hoofdformulier. Refresh en Requery worden altijd uitgevoerd op het object waar ze aan zijn gekoppeld.
Voorbeeldje dat ik zelf gebruik:
Code:
    sQuery = "INSERT INTO tLogin(UserID,Datum,Tijd,Actie)" & vbCrLf
    sQuery = sQuery & "VALUES('" & FnUser & "', CDate(" & CDbl(Date) & "), #" & Format(Now, "HH:mm") & "#, 'Record bijgewerkt" & "')"
    DoCmd.SetWarnings False
    CurrentDb.Execute sQuery, dbFailOnError
    DoCmd.SetWarnings True
    
    Me.fHistorie.Requery
    Me.Repaint
Hiermee wordt een actie weggeschreven in de tabel tHistorie, waarna het subformulier op het tabblad een Requery krijgt. Met Repaint wordt het scherm dan ververst.
 
Uiteraard doe ik wat verkeerd, maar ik weet niet wat.
Ten eerste heb ik in het activate event van het subform de volgende regels geplaatst

Me.SubFormLogdata.Requery
Me.Repaint

Tevens heb ik ook in het timer event van het subforum deze regels geplaatst. Dit zodat ik realtime zou moeten kunnen zien dat er door een user een logregel bij gekomen is. Maar helaas. Als ik zelf inlog zie ik niet de regel verschijnen dat ik ben ingelogd. Die zie ik pas nadat ik bijvoorbeeld de tabel sorteer op datum.

Nog wat extra info. Het loggen van de gegevens gebeurd doordat ik op diverse plaatsen een routine aan roepen. Die routine plaatst dan gegevens in de logtabel.
 
Ook dat heb ik uitgeprobeerd, en werkt ook prima!

Code:
Private Sub Form_Timer()
     Me.Form.Requery
     Me.Repaint
End Sub
Kun je anders een voorbeeldje maken, want ik raak zo langzamerhand door de opties heen.... Alles werkt namelijk ;)
 
Ik moet even wat recht zetten.....

50000 ms is natuurlijk geen 5 seconde, dus als ik verwacht dat na 5 seconde het scherm geupdate wordt dan zit ik natuurlijk fout.
Mijn ongeduld heeft het even gewonnen van mijn doozettings vermogen....
Nadat ik de timer tijd op 500 ms gezet had zach ik wel dat de tabel geupdate werd. Maar een halve seconde vreed natuurlijk wel behoorlijk wat capaciteit. Dus nadat ik zag dat het wel werkte heb ik de tijd naar 30000 ms seconde gezet.

Dus het timer event werkt weldegelijk. :o Sorry.

Het activate event krijg ik niet aan de praat. Maar dat maakt in feite niet meer uit als iedere 30 sec de tabel ververst wordt zodra er een beheerder inlogt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan