Application Windows Form (vb.Net) et fermeture de fichier
mornaloce
Messages postés47Date d'inscriptionlundi 17 mars 2008StatutMembreDernière intervention21 mars 2014
-
2 avril 2012 à 11:32
ehjoe
Messages postés728Date d'inscriptionsamedi 4 avril 2009StatutMembreDernière intervention30 mars 2014
-
30 avril 2012 à 20:59
Bonjour à tous,
Bon je vous explique mon problème :
Je suis actuellement entrain de réaliser une application windows form en vb.net pour pouvoir transférer des données d'une base à une autre.
J'ai eu besoin de créer un fichier access via mon application. Pour cela j'ai utilisé le catalogue d'ADOX. Mon fichier se créé bien grâce à la méthode MonCatalogue.Create() mais cette méthode ouvre automatiquement le fichier qu'elle viens de créer, du coup je n'ai aucune idée de la façon dont je peux refermer ce fichier une fois créé. Est-ce que quelqu'un aurait une idée ?
Mon deuxième problème est que pendant le transfert de données j'aimerai afficher une progressebar ou au moins un label qui indiquerait quelle table est en cours de transfert. Le truc c'est que pendant le transfert ma form freeze, impossible de rafraichir l'affichage pour affiché quoi que ce soit. Est-ce possible d'optimiser l'affichage ou non ?
Voilà, j'espère avoir été clair dans mes explications.
ehjoe
Messages postés728Date d'inscriptionsamedi 4 avril 2009StatutMembreDernière intervention30 mars 20144 11 avril 2012 à 09:15
Bonjour Mornaloce,
As-tu essayé (sous réserve), de l'assigner à un pointeur en lecture, puis de le fermer de cette façon ?
Ou encore avec Reset ?
Pour l'affichage de la barre de progression, je présume que tu es en mesure de compter les enregistrements, de facto, tente par exemple de changer la valeur de la barre tous les 10 enregistrements seulement, ceci associé à un DoEvents.
mornaloce
Messages postés47Date d'inscriptionlundi 17 mars 2008StatutMembreDernière intervention21 mars 20142 17 avril 2012 à 10:24
Bonjour Joe,
J'ai réussi à réglé le problème pour la fermeture de mon fichier.
Par contre pour la barre de chargement le problème n'est pas de la crée mais plutôt que durant tout le temps du transfert de données la fenêtre mon application est bloquée, "freezée". Par exemple si j'ouvre une page internet par dessus puis que je ferme cette page, la fenêtre de mon application va contenir un bout de cette page.
ehjoe
Messages postés728Date d'inscriptionsamedi 4 avril 2009StatutMembreDernière intervention30 mars 20144 17 avril 2012 à 10:32
Bonjour Mornaloce,
Alors il faut tenter d'utiliser DoEvents afin de redonner la main à la feuille, et aussi, par exemple tous les 10 enregistrement, de marquer une pause de 50 ms, soit dans ta boucle de lecture :
ehjoe
Messages postés728Date d'inscriptionsamedi 4 avril 2009StatutMembreDernière intervention30 mars 20144 17 avril 2012 à 10:37
Suite,
J'ai oublié :
Si tu charges des données dans un objet, mieux vaut utiliser le sablier pour l'affichage et rendre ton objet invisible le temps du chargement, il prend bien moins de ressources ainsi.
Joe.
Vous n’avez pas trouvé la réponse que vous recherchez ?
mornaloce
Messages postés47Date d'inscriptionlundi 17 mars 2008StatutMembreDernière intervention21 mars 20142 30 avril 2012 à 11:58
Merci de ton aide Joe. J'ai cherché sur internet pour le DoEvents mais la plus part du temps il est plutôt conseiller d'utiliser les threads. J'ai un peu de mal pour l'instant mais bon je vais continuer à chercher.
Autrement j'ai un autre problème où tu pourras peut-être m'aider. En fait lors de mon transfert d'une table de ma base Access A vers ma base Access B il m'arrive que mon appli me renvoie une erreur me disant que ma base B est verrouillée. D'après ce que j'ai pu voir j'en ai conclu que mon code insérait trop rapidement les données d'une table à l'autre, de fait les lignes de ma table1 n'étant pas encore toutes insérées le code de mon application envoie déjà la requête pour l'insertion dans ma table 2. J'ai donc fait un thread.sleep(2000) dans mon code pour laisser le temps à access de transférer les données dans la table 1 avant de passer à la suite du code. Ça a d'ailleurs confirmé que le problème était bien celui que je t'ai exposé puisque l'erreur ne survient plus dans mon appli. En revanche je trouve cette manière de régler le problème pas très propre d'autant que certaines table n'ont que 3 lignes à insérer ce qui ne prend même pas 1 sec mais met mon code en pause pendant 2 secondes quand même. Aurais-tu une autre manière de faire ?
ehjoe
Messages postés728Date d'inscriptionsamedi 4 avril 2009StatutMembreDernière intervention30 mars 20144 30 avril 2012 à 20:59
Bonjour Mornaloce, suite,
Si si, DoEvent est généralement une bonne solution et est employé en vb6 et vbNet...
Sinon, le problème c'est qu'au lieu de paramétrer des bases de données, si tu programmais ton code avec des fichiers, peut être que ça irait plus vite, sans doute car il y aurait moins d'intermédiaires ?