MS-Acces event bij het laden formulier

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • sngsc6
  • Registratie: December 2020
  • Laatst online: 25-08 16:31
Zou iemand mij misschien kunnen vertellen of het mogelijk is om in Microsoft Access een formulier te laden en vervolgens daar gelijk een event aan te koppelen maar met het resultaat op het formulier te gaan plaatsen?

Bij een ‘load event’ blijkt namelijk dat de code eerst afgewerkt moet worden, voordat het formulier zichtbaar wordt, en dus ook de voortgang, waar ik dus graag onder het processen naar wil kijken.

Ik wil dus eerst een formulier openen daarna een event starten die het resultaat in het formulier plaatst. Mijn event duurt ongeveer 3 kwartier en het is dus handig om te zien hoe ver dat het event onderweg is.

Graag hoor ik of dit mogelijk is en zo ja hoe je dat doet.

Ik gebruik MS-Access 2021, op Windows-11.

Beste antwoord (via sngsc6 op 28-05-2025 17:35)


  • Joep
  • Registratie: December 2005
  • Laatst online: 13-09 13:21
Het laatste form-event dat triggert wanneer je een formulier opent is Current: Order of events for database objects - Microsoft Support

Maar ook dat event moet eerst zijn afgelopen voordat het formulier getoond wordt.

Als je formulier een control heeft, is het "On Enter"-event van die control het volgende dat getriggerd wordt. Dat gebeurt dus na het tonen van het formulier. Ik heb niet getest of de tab-volgorde van alle controls en dus welke control in het formulier de cursor/focus krijgt, er toe doet.

Edit: Ik heb niet getest of je zaken kunt verversen in je formulier tijdens dit event. Misschien is het zoals @Boss aangeeft een probleem.

Edit 2: Net getest. Geen probleem, het werkt!

Er is ook nog het Form_Timer-event dat telkens opnieuw triggert na de in te stellen interval nadat het formulier getoond wordt. Dan moet je de TimerInterval (in millisecondes) van je formulier setten tijdens (bij voorkeur) het Form_Current-event en dan het Form_Timer-event gebruiken om code te draaien na het openen van je formulier. Dat ziet er dan zo uit:

Visual Basic:
1
2
3
4
5
6
7
Private Sub Form_Current()
    Me.TimerInterval = 1000
End Sub

Private Sub Form_Timer()
    MsgBox "derp"
End Sub


Je zou de TimerInterval misschien kunnen veranderen naar heeeel veel millisecondes (max 2,147,483,647) als je eenmaal in het Form_Timer-event bent zodat de code in principe maar 1 keer draait na het openen van het formulier.

[ Voor 5% gewijzigd door Joep op 28-05-2025 16:54 ]

Alle reacties


Acties:
  • +1 Henk 'm!

  • Boss
  • Registratie: September 1999
  • Laatst online: 12-09 10:56

Boss

+1 Overgewaardeerd

Dat zou je in een aparte thread moeten doen, maar dat kan niet echt makkelijk in Access.
Wat je zou kunnen proberen is een timer-event gebruiken, volgens mij lopen die in een aparte thread. Daar kan je dan je lang-lopende actie in uitvoeren.

Access is verder echt een single-thread omgeving, verwacht er niet te veel van. Als je een lang-lopend proces hebt dan zit er vaak echt niets anders op dan wachten.

[ Voor 26% gewijzigd door Boss op 28-05-2025 15:51 ]

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 11-09 18:27
Ik heb al lang niets meer met Access gedaan, maar hebben ze geen Shown event? Dat wordt vaak afgevuurd als het scherm/formulier voor het eerst getoond wordt.
Anders is wat Boss zegt een goede suggestie. Als je .Net code kan gebruiken zou je ook een BackGroundWorker kunnen gebruiken om iets op de achtergrond te draaien en het resultaat dan op het formulier te zetten.

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 22:38

BoAC

Memento mori

Ik denk dat je activate event moet gebruiken icm een Boolean om bij te houden dat hij geweest is.

Bron: https://www.access-progra...event-progression.329699/

[ Voor 35% gewijzigd door BoAC op 28-05-2025 15:57 ]


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Joep
  • Registratie: December 2005
  • Laatst online: 13-09 13:21
Het laatste form-event dat triggert wanneer je een formulier opent is Current: Order of events for database objects - Microsoft Support

Maar ook dat event moet eerst zijn afgelopen voordat het formulier getoond wordt.

Als je formulier een control heeft, is het "On Enter"-event van die control het volgende dat getriggerd wordt. Dat gebeurt dus na het tonen van het formulier. Ik heb niet getest of de tab-volgorde van alle controls en dus welke control in het formulier de cursor/focus krijgt, er toe doet.

Edit: Ik heb niet getest of je zaken kunt verversen in je formulier tijdens dit event. Misschien is het zoals @Boss aangeeft een probleem.

Edit 2: Net getest. Geen probleem, het werkt!

Er is ook nog het Form_Timer-event dat telkens opnieuw triggert na de in te stellen interval nadat het formulier getoond wordt. Dan moet je de TimerInterval (in millisecondes) van je formulier setten tijdens (bij voorkeur) het Form_Current-event en dan het Form_Timer-event gebruiken om code te draaien na het openen van je formulier. Dat ziet er dan zo uit:

Visual Basic:
1
2
3
4
5
6
7
Private Sub Form_Current()
    Me.TimerInterval = 1000
End Sub

Private Sub Form_Timer()
    MsgBox "derp"
End Sub


Je zou de TimerInterval misschien kunnen veranderen naar heeeel veel millisecondes (max 2,147,483,647) als je eenmaal in het Form_Timer-event bent zodat de code in principe maar 1 keer draait na het openen van het formulier.

[ Voor 5% gewijzigd door Joep op 28-05-2025 16:54 ]


Acties:
  • 0 Henk 'm!

  • sngsc6
  • Registratie: December 2020
  • Laatst online: 25-08 16:31
Dank,

Met een 'on timer event' en een interval van 1, blijkt het te werken.
Pagina: 1