OVH Cloud OVH Cloud

Timer

3 réponses
Avatar
Claude
Bonjour =E0 vous tous,

Voici mon probl=E8me. J'ai une application connect=E9e =E0 des=20
bases de donn=E9es (classique !). Jusqu'=E0 aujourd'hui,=20
l'utilisateur doit appuyer sur le menu "Actualiser" afin=20
de rafra=EEchir les donn=E9es de l'application.=20

Ceci fonctionne =E0 merveille... mais j'aimerais=20
moderniser cette application afin que les donn=E9es se=20
rafra=EEchissent d'elles-m=EAme =E0 toutes les minutes disons.=20
Or, j'ai pens=E9 utiliser un contr=F4le comme le "TIMER" afin=20
d'ex=E9cuter cette t=E2che.=20

L=E0 d=E9bute mon probl=E8me. J'ai une fonction qui sert =E0=20
rafra=EEchir toutes les donn=E9es (SetData) qui est appel=E9e=20
dans mes 2 proc=E9dures :
1) mnuAffichage_Actualiser_Click()
2) tmrActualiser_Timer()

=3D=3D> Mon application plante litt=E9ralement lorsque l'on=20
appuie sur le menu "Actualiser", alors que le timer =E9tait=20
d=E9j=E0 en train d'ex=E9cuter cette m=EAme fonction, les 2=20
essayant de modifier les m=EAmes recordsets...

Comment savoir si l'une ou l'autre des 2 proc=E9dures est=20
d=E9j=E0 en fonction ? J'ai essay=E9 d'utiliser une variable=20
globale (Dim blnActualisation As Boolean), puis de=20
modifier son =E9tat selon que l'application est en train de=20
modifier les recordsets ou non, mais cel=E0 ne semble pas=20
=EAtre suffisant !

Merci d'avance,
Claude

3 réponses

Avatar
Christian HUBERT-HUGOUD- Xtrem7
Contre-proposition qui fonctionne bien pour moi :

en début de ta proc d'actualisation :

Static Running&

if Running = true then exit sub
Running = true

'on bosse un peu...

puis dans TOUTES les sorties de la proc :
Running = false


Cela fonctionne très bien.

Christian


"Claude" a écrit dans le message de
news:0b0201c46e86$067f8530$
Bonjour à vous tous,

Voici mon problème. J'ai une application connectée à des
bases de données (classique !). Jusqu'à aujourd'hui,
l'utilisateur doit appuyer sur le menu "Actualiser" afin
de rafraîchir les données de l'application.

Ceci fonctionne à merveille... mais j'aimerais
moderniser cette application afin que les données se
rafraîchissent d'elles-même à toutes les minutes disons.
Or, j'ai pensé utiliser un contrôle comme le "TIMER" afin
d'exécuter cette tâche.

Là débute mon problème. J'ai une fonction qui sert à
rafraîchir toutes les données (SetData) qui est appelée
dans mes 2 procédures :
1) mnuAffichage_Actualiser_Click()
2) tmrActualiser_Timer()

==> Mon application plante littéralement lorsque l'on
appuie sur le menu "Actualiser", alors que le timer était
déjà en train d'exécuter cette même fonction, les 2
essayant de modifier les mêmes recordsets...

Comment savoir si l'une ou l'autre des 2 procédures est
déjà en fonction ? J'ai essayé d'utiliser une variable
globale (Dim blnActualisation As Boolean), puis de
modifier son état selon que l'application est en train de
modifier les recordsets ou non, mais celà ne semble pas
être suffisant !

Merci d'avance,
Claude
Avatar
le_troll
Bonjour,

Si tu utilises le timer, tu n'as plus besoin de savoir où tu en es,
puisqu'il fait sans cesse ce que tu lui demande, de tes 2 procédures, il
conviendrait de faire un seul appel au timer dés le lancement, en mettant le
rafraîchissement dedans par exemple, et... si ça cause un conflit d'écrire
dans la bdd et de la rafraîchir, de suspendre le timer durant l'ordre
d'écriture, puis de reprendre après, c'est un contexte multi-utilisateurs je
présume...

--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Ce message est plein de virus "certifiés"
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !
------------------------------------------


"Claude" a écrit dans le message de
news: 0b0201c46e86$067f8530$
Bonjour à vous tous,

Voici mon problème. J'ai une application connectée à des
bases de données (classique !). Jusqu'à aujourd'hui,
l'utilisateur doit appuyer sur le menu "Actualiser" afin
de rafraîchir les données de l'application.

Ceci fonctionne à merveille... mais j'aimerais
moderniser cette application afin que les données se
rafraîchissent d'elles-même à toutes les minutes disons.
Or, j'ai pensé utiliser un contrôle comme le "TIMER" afin
d'exécuter cette tâche.

Là débute mon problème. J'ai une fonction qui sert à
rafraîchir toutes les données (SetData) qui est appelée
dans mes 2 procédures :
1) mnuAffichage_Actualiser_Click()
2) tmrActualiser_Timer()

==> Mon application plante littéralement lorsque l'on
appuie sur le menu "Actualiser", alors que le timer était
déjà en train d'exécuter cette même fonction, les 2
essayant de modifier les mêmes recordsets...

Comment savoir si l'une ou l'autre des 2 procédures est
déjà en fonction ? J'ai essayé d'utiliser une variable
globale (Dim blnActualisation As Boolean), puis de
modifier son état selon que l'application est en train de
modifier les recordsets ou non, mais celà ne semble pas
être suffisant !

Merci d'avance,
Claude
Avatar
crevecoeur jerome
On peux aussi mettre la propriété enabled à false du bouton actualiser
le temps du traitement.

Comme ça il n'y a plus de risques d'erreur
Cordialement

Christian HUBERT-HUGOUD- Xtrem7 a écrit :
Contre-proposition qui fonctionne bien pour moi :

en début de ta proc d'actualisation :

Static Running&

if Running = true then exit sub
Running = true

'on bosse un peu...

puis dans TOUTES les sorties de la proc :
Running = false


Cela fonctionne très bien.

Christian


"Claude" a écrit dans le message de
news:0b0201c46e86$067f8530$
Bonjour à vous tous,

Voici mon problème. J'ai une application connectée à des
bases de données (classique !). Jusqu'à aujourd'hui,
l'utilisateur doit appuyer sur le menu "Actualiser" afin
de rafraîchir les données de l'application.

Ceci fonctionne à merveille... mais j'aimerais
moderniser cette application afin que les données se
rafraîchissent d'elles-même à toutes les minutes disons.
Or, j'ai pensé utiliser un contrôle comme le "TIMER" afin
d'exécuter cette tâche.

Là débute mon problème. J'ai une fonction qui sert à
rafraîchir toutes les données (SetData) qui est appelée
dans mes 2 procédures :
1) mnuAffichage_Actualiser_Click()
2) tmrActualiser_Timer()

==> Mon application plante littéralement lorsque l'on
appuie sur le menu "Actualiser", alors que le timer était
déjà en train d'exécuter cette même fonction, les 2
essayant de modifier les mêmes recordsets...

Comment savoir si l'une ou l'autre des 2 procédures est
déjà en fonction ? J'ai essayé d'utiliser une variable
globale (Dim blnActualisation As Boolean), puis de
modifier son état selon que l'application est en train de
modifier les recordsets ou non, mais celà ne semble pas
être suffisant !

Merci d'avance,
Claude