jdddeschamps
Messages postés13Date d'inscriptionjeudi 18 décembre 2008StatutMembreDernière intervention23 mars 2009
-
23 mars 2009 à 00:20
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
23 mars 2009 à 10:26
C'est étrange ce qui m'arrive ; voici mon code :
Private Sub MDIForm_Load()
dans initialisation, je teste la base de donnée et j'ouvre un msgbox en cas d'erreur puis je propose de la réparer.
dans frmscope, un timer ouvre la base de donnée.
quand je teste le code dans l'éditeur VB6, tout va bien, j'ai le temps de réparer la base de données : le code du timer ne s'exécute pas tant que l'opérateur n'a pas répondu aux msgbox successifs.
quand je compile et que je crée l'exe puis que je le lance, le code du timer s'exécute avant que l'opérateur ait le temps de répondre aux msgbox et de réparer la bdd !
Quelqu'un a-t-il une explication et connait-il un moyen :
soit de rendre l'exécution identique dans l'éditeur et sous forme d'exe ;
soit d'interdire l'éxecution du timer temps que la procédure initialisation n'est pas finie.
Ma solution, si je n'ai pas de meilleure réponse, est de créer une variable publique initialisation_OK que les différents timer de l'application vont tester avant d'exécuter leur code.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 23 mars 2009 à 02:15
Salut
Eh bien fait ton Init avant de lancer les formes qui vont utiliser ta DB.
Essyer de synchronoser des évènements est audacieux.
Il vaut mieux se baser sur les états des objets (State pour une connexion), que sur du timing.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
jdddeschamps
Messages postés13Date d'inscriptionjeudi 18 décembre 2008StatutMembreDernière intervention23 mars 2009 23 mars 2009 à 09:58
Effectivement,
J'avais essayé de coller l'init avant le frmscope.show, mais cela ne suffit pas, il fallait le coller avant toute référence à une propriété de frmscope (.top, width, etc) car je pense que la méthode load s'exécute dès l'appel à une propriété de la feuille ce qui déclenche le timer.
quels sont les états des objets ? ce dont tu viens de parler comme une feuille chargée ou non chargée ?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 23 mars 2009 à 10:09
oui, une reference a une propriété déclenche le chargement de la Form
tu peux également jouer avec la propriété Enabled de ton Timer... et ainsi ne pas le démarrer au chargement de la Form, mais plus tard...
ou au pire, tester la propriété State de ta connection, au début de ton Timer, avant de jouer avec ta base de données non initialisée.
NB. Si l'init fais reference aux propriétés de ta form, c'est que tu as mal concu la chose. Il ne devrait pas y avoir de dépendance à ce niveau là, je pense
Vous n’avez pas trouvé la réponse que vous recherchez ?
jdddeschamps
Messages postés13Date d'inscriptionjeudi 18 décembre 2008StatutMembreDernière intervention23 mars 2009 23 mars 2009 à 10:18
jetcomp.exe
C'est vrai, mon idée n'était pas judicieuse : il s'agissait de tester la bdd à l'ouverture puis à exécuter jetcomp.exe si nécessaire après accord de l'opérateur.
Mieux vaut tout simplement exécuter jetcomp.exe au query unload et systématiquement à l'ouverture.
Parfois mon application plante en cours de route sur bdd corrompue. au redémarrage de l'application, jetcomp.exe réparera la bdd systématiquement.
J'ai déjà fait le ménage dans les procédures pour systématiquement fermer les rst et les databases (http://support.microsoft.com/kb/283849/fr).
Le problème pour jetcomp.exe, c'est qu'il va falloir :
- l'installer dans le dossier système ;
- installer vba32.dll et vbar332 pour windows NT (je n'arrive plus à trouver l'article de microsoft qui le dit) ;
- le retrouver dans le dossier système lors de l'exécution ;
- le lancer en shell.