Balayage dune table

acorna Messages postés 53 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 23 mars 2005 - 10 juin 2004 à 13:54
acorna Messages postés 53 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 23 mars 2005 - 10 juin 2004 à 16:26
hello ,

Voila, je desirerais parcourir tous les enregistrements de ma table en me basant sur un numéro d'enregistrement (ici NumMatériel), champ qui fait partie de la table à parcourir.
Seulement,il ne me parcourt toujours que le premier enregistrement. Etant novice en vb, je songe à une erreur de syntaxe dans ma procédure. Des idées?


Private Sub form_load()
Dim Db As Database
Set Db = CurrentDb
Dim Rs As Recordset
Set Rs = Db.OpenRecordset("Select NumMatériel from MATERIEL")
Dim i As Integer
Rs.MoveFirst

For i = 1 To Rs.RecordCount
If Date = DateEmprunt Then
Form_formmatos.QttDispo1 = Form_formmatos.stockinitial + Form_formmatos.entrees - Form_formmatos.QttEmpruntee
Else
Form_formmatos.QttDispo1 = Form_formmatos.stockinitial + Form_formmatos.entrees
End If
i = i + 1
Rs.MoveNext
Next

End Sub

merci ;o)

11 réponses

cs_funseb Messages postés 154 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 28 janvier 2010 1
10 juin 2004 à 14:39
deja tu fais une erreur car c une boucle for donc l'incrémentation de i se fait tout seul , tu n'a pas besoin de mettre i = i + 1 dans ta boucle
d'autre part, si ta donnée dateemprint provien de ta base, il faut l'ajouter dans ton select et mettre :
if date = rs.fields("dateemprunt") then

sinon essai ca :

while not rs.eof

If Date = DateEmprunt Then
Form_formmatos.QttDispo1 = Form_formmatos.stockinitial + Form_formmatos.entrees - Form_formmatos.QttEmpruntee
Else
Form_formmatos.QttDispo1 = Form_formmatos.stockinitial + Form_formmatos.entrees
End If

Rs.MoveNext

clac-clac
0
cs_funseb Messages postés 154 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 28 janvier 2010 1
10 juin 2004 à 14:40
j'ai oublié de mettre wend apres rs.movenext
clac-clac
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 23
10 juin 2004 à 14:41
Juste une question :

Pourquoi fais-tu i=i+1 dans ta boucle ?
En faisant cela, tu sautes systématiquement une ligne sur deux ...
Le 'Next' fait déjà i=i+1 tout seul. Si tu en rajoutes un, tu sautes une ligne.

Pour le reste de ton probème, je sais pas trop. Les BDD, c'est pas trop mon truc.

Manu
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
10 juin 2004 à 14:44
Bonjour,

pour parcourir tout tes enregistrements :

rs.MoveFirst
'tant que tu n'es pas arrivé à la fin des enregistrements
'EOF = End Of File
While Not rs.EOF
'ici tu fais ce que tu veux  :) 
rs.Fields("nomduchamp") ...
rs.MoveNext
Wend


En fait ici ça ne marche pas car il aurait fallu que tu mettes le nombre d'enregistrements dans une variable après avoir fait un MoveLast.
Car là comme tu fais un moveFirst avant ton RecordCount, il ne passe qu'une fois dans ta boucle... je sais c'est bête mais c'est du microsoft ;)

Sinon, par rapport à ton code :
Dim nb As Integer
rs.MoveLast
nb = rs.recordCount
rs.MoveFirst 
For i = 1 to nb
'ton code
rs.MoveNext
Next i


Fanny
0

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

Posez votre question
acorna Messages postés 53 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 23 mars 2005
10 juin 2004 à 15:51
merci @ tous

Fanny, j'ai fait ainsi que tu l'as montré et voici mon code actuel :

Private Sub form_load()
Dim Db As Database
Set Db = CurrentDb
Dim Rs As Recordset
Set Rs = Db.OpenRecordset("select NumMatériel from MATERIEL")
Dim i As Integer
Dim nb As Integer
Rs.MoveLast
nb = Rs.RecordCount

Rs.MoveFirst

For i = 1 To nb
    If Date = DateEmprunt Then
       Form_formmatos.QttDispo1 = Form_formmatos.stockinitial + Form_formmatos.entrees - Form_formmatos.QttEmpruntee
       Else
       Form_formmatos.QttDispo1 = Form_formmatos.stockinitial + Form_formmatos.entrees
    End If
Rs.MoveNext
Next i

End Sub

mais quand i 2 ou plus,il me prend toujours la DateEmprunt et les infos relatives au premier enregistrement (i 1), comme si la dateemprunt avec i = 1 etait la mm qu'a i=2. Hors ce n'est pas le cas, et le calcul n'est pas le mm à effectuer pou calculer mon champ qttdispo1. Ou est donc mon erreur? j'avoue etre plus que perdue...

Merci :)
0
cs_funseb Messages postés 154 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 28 janvier 2010 1
10 juin 2004 à 15:54
a quoi correspond ta donnée dateemprunt ? a une variable ou un un champs de ta base?

clac-clac
0
acorna Messages postés 53 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 23 mars 2005
10 juin 2004 à 15:59
c'est un champ de ma base
0
cs_funseb Messages postés 154 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 28 janvier 2010 1
10 juin 2004 à 16:13
dans ce cas , tu ne selectionnes pas ce champs dans ta requete !!
regarde un de mes premiers post, je te disais que si c t un champs de ta base, il fallait le mettre dans ton select et ensuite mettre :
if date = rs.fields("dateemprunt") then
....
end if

dit moi si ca correspond a ca !

clac-clac
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
10 juin 2004 à 16:17
Si dateEmprunt est un champ de ta table, il faut que tu utilises la formulation :

rs.Fields("DateEmprunt").Value pour récupérer sa valeur.

En fait lorsque tu ouvres un jeu d'enregistrements (recordset), selon un requête de sélection, pour utiliser les différents champs récupérés c'est toujours la même syntaxe :

rs.Fields("nomduchamp").Value

Ainsi, tu compareras la date d'emprunt de chaque enregistrement avec la date du jour.

Par contre, je ne vois pas bien ce que tu souhaites faire par rapport à ton code, car là tu vas réécrire sur le champs
Form_formmatos.QttDispo1 à chaque passage dans la boucle.

Fanny
0
acorna Messages postés 53 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 23 mars 2005
10 juin 2004 à 16:23
re,
oui, tu avais raison c'était bien ça,il parcourt bien mes enregistrements! :big) . Ne reste qu'un dernier problème qui je suppose est du même genre : une fois sorti de la boulcle, la derniere valeur calculée de mon champ "QttDispo1"(mettons 130) est inscrite dans ma premiere ligne (et donc premier enregistrement), plutot que d'afficher chaque resultat calculé dans la ligne correspondante à l'enregistrementex : enregistrement 1 QttDispo1 110, enregistrement 2 QttDispo1 130 etc...), il me met tous les resultats dans la meme case, et j'obtiens donc uniquement la valeur du dernier calcul dans mon formulaire en feuille de données....
0
acorna Messages postés 53 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 23 mars 2005
10 juin 2004 à 16:26
oui justement fanny, c'est pas le but du tout de réécrire le champ,mais de les inscrire dans la table par enregistrement,au fur et à mesure des calculs, comme j'ai tenté de l'expliquer au dessus,mais je ne sais pas si j'ai été très claire %-6
0
Rejoignez-nous