Mettre une progressbar lors du chargement de ma base

cs_SEB73460 Messages postés 271 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 novembre 2022 - 1 juil. 2007 à 08:37
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 1 juil. 2007 à 21:18
Bonjour à vous tous et bon Dimanche

Voila, je voudrai mettre une Progressbarre lors du chargement de ma base de donnée Access sur ma form
J'ai telecharger pas mal d'exemples de Progressbarre
Mais je ne sais pas comment je peux faire pour realiser l'avencement de la Pbarre en fonction de ma base
Je pense que dans tous les cas il faut utiliser un Timer
Pour moi ( je ne sais pas si mon resonnement est bon ) je pense augmenter d'une unitée ma Pb  à chaque intervale de mon timer en fonction des lignes de ma base qui sont en cours de chargement

Si quelqu'un peux me donner un coup de pouce pour demarrer
Merci beaucoup
A+

20 réponses

fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
1 juil. 2007 à 10:05
Salut,
Je ne vois pas l'interêt d'utiliser un timer pour faire évoluer ta pgbarre.
Il faut mettre sa propriété max = au nombre d'enregistrement que tu as dans ton recordset.
Quand tu fais ta boucle dans ton recordset, tu augmentes d'une unité à chaque boucle.

 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
0
cs_SEB73460 Messages postés 271 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 novembre 2022
1 juil. 2007 à 10:28
Merci  fiko81 pour ta réponse
je débute et je ne voyait pas le chose de cette facon
je vais essayer avec un bout de code
A+
0
cs_SEB73460 Messages postés 271 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 novembre 2022
1 juil. 2007 à 11:34
Bonjour,

J'ai fais des essais avec :
ProgressBar1.Maximum = objdatatable.Rows
mais cela ne marche pas
0
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
1 juil. 2007 à 11:48
Mets ton code complet pour voir qu'elle moteur de connexion tu utilises, quelle commande tu utilises, quelles genres d'informations tu vas chercher dans ta base...

 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_SEB73460 Messages postés 271 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 novembre 2022
1 juil. 2007 à 12:57
Merci pour ton aide
Voici mon code :


ListView1.AllowColumnReorder = True
'R‚organisation des colonnes manuellement



ListView1.FullRowSelect =




True



'S‚lection de la ligne complete

ListView1.View = View.Details




'Le listView est en mode D‚tail






' Commande pour lire dans la base de donn‚es

SQLString =




"SELECT [Fabricant],[Type],[D‚signation],[Taille m‚moire],[Boitier],[Temps d'accŠs],[Nombre d'octets],[Code Fabricant],[Code Composant] FROM PROG"






'Ouverture de la connection

objconnection.Open()







'Le dataAdapter ‚tablit tout d'abord le lien entre la requˆte SQLString et la base Objconnection






'Instance un objet adapter

objdataadapter =




New
OleDb.OleDbDataAdapter(SQLString, objconnection)


'A l'aide de la propri‚t‚ fill du dataadapter charge le dataset

objdataadapter.Fill(objdataset,




"PROG"
)objdatatable = objdataset.Tables(


"PROG"
)


'bloque le rafraichissement

ListView1.BeginUpdate()


 







' *** Boucle for each ( Pour chaque ... )






'R‚pŠte chaque Table dans le DataSet collection






For



Each
objdatatable

In
objdataset.Tables


'R‚pŠte chaque ligne de la table






For



Each
objdatarow

In
objdatatable.Rows 


'Affiche la base de donn‚es dans le listview

LviItem = ListView1.Items.Add(objdatarow(




"Fabricant"
).ToString)SUBItems = LviItem.SubItems.Add(objdatarow(


"Type"
).ToString)SUBItems = LviItem.SubItems.Add(objdatarow(


"D‚signation"
).ToString)SUBItems = LviItem.SubItems.Add(objdatarow(


"Taille m‚moire"
).ToString)SUBItems = LviItem.SubItems.Add(objdatarow(


"Boitier"
).ToString)SUBItems = LviItem.SubItems.Add(objdatarow(


"Temps d'accŠs"
).ToString)SUBItems = LviItem.SubItems.Add(objdatarow(


"Nombre d'octets"
).ToString)SUBItems = LviItem.SubItems.Add(objdatarow(


"Code Fabricant"
).ToString)SUBItems = LviItem.SubItems.Add(objdatarow(


"Code Composant"
).ToString) 


Next






Next






' Affiche le contenu au complet de listview1

ListView1.EndUpdate()







'Pas de multiselect pour ne pas avoir plusieurs ligne bleue lors de la naviguation dans le listview

ListView1.MultiSelect =




False






'Si la base ne contient aucun enregistrement alors messagebox






If
rownum > objdatatable.Rows.Count - 1

Then

MsgBox(




"La base de donn‚es est vide, ajouter un enregistrement"
, MsgBoxStyle.OkOnly,

" Information sur la base de donn‚es !"
)


End



If






'Affiche dans label15 le nombre d'entr‚e dans la base de donn‚es

Label15.Text = ListView1.Items.Count







'Fermeture de la connection

objconnection.Close()
0
cs_Exploreur Messages postés 4822 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
1 juil. 2007 à 14:51
Salut,

Je la mettrais ici la progréssion :

For
Eachobjdatarow
Inobjdatatable.Rows
TaProgressBar.Value = TaProgressBar.Value + 1 

'Affiche la base de donn'es dans le listview
LviItem = ListView1.Items.Add(objdatarow(

"Fabricant" ).ToString)
SUBItems = LviItem.SubItems.Add(objdatarow(

"Type" ).ToString)
SUBItems = LviItem.SubItems.Add(objdatarow(

"D?signation" ).ToString)
SUBItems = LviItem.SubItems.Add(objdatarow(

"Taille m?moire" ).ToString)
SUBItems = LviItem.SubItems.Add(objdatarow(

"Boitier" ).ToString)
SUBItems = LviItem.SubItems.Add(objdatarow(

"Temps d'acc?s" ).ToString)
SUBItems = LviItem.SubItems.Add(objdatarow(

"Nombre d'octets" ).ToString)
SUBItems = LviItem.SubItems.Add(objdatarow(

"Code Fabricant" ).ToString)
SUBItems = LviItem.SubItems.Add(objdatarow(

"Code Composant" ).ToString)
Next

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
1 juil. 2007 à 15:09
Salut,
Tu as dit :
J'ai fais des essais avec :




ProgressBar1.Maximum = objdatatable.Rows
mais cela ne marche pas



c'est normal car


objdatatable.Rows


n'est pas une valeur numérique mais un objet




il te faut trouver la proporiété qui te renvoie le nombre de ligne.
Je connais pas encore mais un truc comme ça peut-être (à tester car je ne suis pas sûre que ça existe) :



ProgressBar1.Maximum = objdatatable.Rows.Count



Sinon après pour l'incrémentation : suivre le conseil d'exploreur










 Fiko ;-)



La reponse vous convient pensez > Accepter <
<hr />
0
cs_SEB73460 Messages postés 271 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 novembre 2022
1 juil. 2007 à 15:25
Salut,
ProgressBar1.Maximum = objdatatable.Rows.Count

Existe bien mais cela ne me permet pas de remplir ma Pbarre à 100%

Et j'ai l'impression que la progression est tres rapide je ne la voie presque pas

A+
0
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
1 juil. 2007 à 15:30
Vérifie la chose suivante :
Est-ce que objdatatable.Rows.Count  te renvoie bien le nombre de ligne dans ta table... On sait jamais.

 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
0
cs_SEB73460 Messages postés 271 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 novembre 2022
1 juil. 2007 à 15:39
objdatatable.Rows.Count = nombre de ligne
ce que je ne comprends pas c'est :

si j'ai 4 lignes dans objdatatable.Rows.Count ma Pbarre devrait avancer de 4 * 25% pour a la fin etre à 100%
ce n'est pas mon cas elle avance j'usqu'à 6 % et elle stop
A+
0
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
1 juil. 2007 à 15:53
Mais est-ce que objdatatable.Rows.Count  te renvoie bien le nombre de ligne dans ta table

 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
0
cs_SEB73460 Messages postés 271 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 novembre 2022
1 juil. 2007 à 15:58
Oui 6 lignes
A+
0
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
1 juil. 2007 à 16:02
Peux-tu remmetre ton nouveau code svp. Parce-que comme ça, on avance à l'aveuglette

 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
0
cs_SEB73460 Messages postés 271 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 novembre 2022
1 juil. 2007 à 16:11
'R‚pŠte chaque Table dans le DataSet collection






For



Each
objdatatable

In
objdataset.Tables


'Propriet‚e max de la progressbar1 = nombre d'enregistrements dans la base de donn‚es

ProgressBar1.Maximum = objdatatable.Rows.Count







'R‚pŠte chaque ligne de la table






For



Each
objdatarow

In
objdatatable.Rows


'Incr‚mentation de 1 de la progressbar … chaque passage

ProgressBar1.Value = ProgressBar1.Value + 1







'Affichage du % dans le label21

Label21.Text = ProgressBar1.Value &




" %"






'Affiche la base de donn‚es dans le listview

LviItem = ListView1.Items.Add(objdatarow(




"Fabricant"
).ToString)SUBItems = LviItem.SubItems.Add(objdatarow(


"Type"
).ToString)SUBItems = LviItem.SubItems.Add(objdatarow(


"D‚signation"
).ToString)SUBItems = LviItem.SubItems.Add(objdatarow(


"Taille m‚moire"
).ToString)SUBItems = LviItem.SubItems.Add(objdatarow(


"Boitier"
).ToString)SUBItems = LviItem.SubItems.Add(objdatarow(


"Temps d'accŠs"
).ToString)SUBItems = LviItem.SubItems.Add(objdatarow(


"Nombre d'octets"
).ToString)SUBItems = LviItem.SubItems.Add(objdatarow(


"Code Fabricant"
).ToString)SUBItems = LviItem.SubItems.Add(objdatarow(


"Code Composant"
).ToString) 


Next






Next






'Mise a 0 de la progressbar1

ProgressBar1.Value = 0







'Mise … 0 du label21






Label21.Text = "%"






' Affiche le contenu au complet de listview1

ListView1.EndUpdate()k
0
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
1 juil. 2007 à 16:34
Bon OK,
Ton code m'a l'air correct.
Il peut qu'il réside une nuance entre rows et rows.count (ça m'étonnerais mais on ne sait jamais).
Il faut que tu fasses le test suivant pour valider que le nombre d'enregistrements correspond au nombre de fois que la boucle est  exécutée :
Vérifies (pour une seule table) que la valeur renvoyée par objdatatable.Rows.Count = nombre de boucle dans
For
Each
objdatarow
In
objdatatable.Rows

 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
0
cs_SEB73460 Messages postés 271 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 novembre 2022
1 juil. 2007 à 16:42
De ce cote la il n'y a pas de probleme
le nombre d'enregistrements correspond bien au nombre de fois que la boucle est  exécutée
A+
0
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
1 juil. 2007 à 16:48
Là c'est quand même plus inquiétant...
je vois plus qu'un seule chose : ProgressBar1.Maximum = objdatatable.Rows.Count ne fonctionne pas...
Dans ta boucle affiche un message qui te donne la valeur maximum
ProgressBar1.Maximum et la valeur
ProgressBar1.Value
... On va y arriver

 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
1 juil. 2007 à 20:01
Bonsoir,

Il me semble que le nombre d'articles d'un recordset n'est précisément connu qu'une fois le recordset établi (donc déjà chargé)... et que s'en servir comme valeur maximum d'une progressBar (de contrôle de chargement) est donc assez étrange ....
0
fiko81 Messages postés 381 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 5 septembre 2010 3
1 juil. 2007 à 20:14
Salut jmfmarques.
Je ne connais pas bien encore la prog en .net. Par contre, tu peux connaitre le nombre de recordset en faisant un moveLast et un movefirst et là cela devient poddible. Le temps d'éxécution est plus long forcément (on balaye deux fois le recordset "pour rien")

 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
1 juil. 2007 à 21:18
Bonsoir, Fiko,


 


C'est bien ce que je dis, malheureusement :


Si tu fais un movelast ou un moveFirst, c'est que le chargement a déjà éte fait !


Quelle serait alors l'utilité d'une barre de progression destinée à afficher la progression d'un chargement déjà fait ?


Telle est la question
0