Re : balayage d'une table

acorna Messages postés 53 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 23 mars 2005 - 11 juin 2004 à 08:36
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 - 11 juin 2004 à 14:30
Bonjour,

Je recommence un nouveau sujet suite à celui que j'avais déjà créé et ou l'on m'avait bien aidée. Il demeure un dernier problème : mon code tel qu'il est la me place tous les resultats calculés de mon champ QttDispo1 sur la meme ligne. Comment les inscrire au fur et à mesure dans ma tableenregistrement par enregistrement?

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

Rs.MoveFirst

For i = 1 To nb
    If Date = Rs.Fields("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


Merci encore pour vos réponse, j'ai vraiment beaucoup de mal, surtout en fin de semaine ;)

5 réponses

HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
11 juin 2004 à 08:49
Bonjour :)

J'ai réfléchi à ton problème et ce que je ne comprends pas c'est que tu passes par un formulaire.

Pour insérer tes champs dans une autre table, tu devrais plutôt utiliser une requête SQL d'insertion (ou de mise à jour).

Parce qu'en fait le problème que tu as est tout bête.
Tu veux les insérer à partir d'un formulaire mais comme tu restes au même endroit de ton formulaire (tu ne changes pas d'enregistrement dans ta boucle), il réécrit à chaque fois sur ton champ QttDispo1.

Pour pouvoir mieux répondre à ta question, est-ce que tu pourrais écrire la structure de ta table qui contient le champs QttDispo1 (celle que tu veux remplir).
Et si tu la rempli par rapport à d'autres champs, quels sont-ils ?

Par ailleurs, est-ce que tu veux écrire des nouveaux enregistrements ou simplement mettre à jour une table par rapport à la date du jour ?

Sinon tu peux essayer dans ta boucle de passer à l'enregistrement suivant de ton formulaire (je n'ai pas la formule en tête).

Fanny
0
acorna Messages postés 53 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 23 mars 2005
11 juin 2004 à 09:23
:)

En fait, je passais par un formulaire tout simplement parce que je n'ai pas encore vu le SQL. Dans ma table MATERIEL, j'ai les champs suivants : (NumMatériel, désignation, stock initial, QttEmpruntee, QttDispo1, stock final,entrees, et qq autres moins importants, chaque NumMatériel donnant suite à un enregistrementd ans chaque champ). Ces champs sont remplis à l'origine par l'intermediaire d'un formulaire, et le champ QtDispo est calculé. Seulement, sa valeur doit varier en fonctiond de la date, afin de ne pas diminuer le stock avant la date ou le matériel est utilisé. C'est pour cela que j'avais fait une boucle sur le lancement du formulaire, afin de comparer les dates, et de mettre à jour tous mes enregistrements correspondants si la date est celle du jour.
Ma Qttdispo est egale soit au stockinitial + entrees ou soit au stockinitial+entrees-QttEmpruntee.

Voilà. J'espère avoir été claire, mais il est vrai que visualiser sans connaitre le contexte est loin d'etre simple.
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
11 juin 2004 à 13:01
Dans ces cas là ce que tu peux faire c'est faire deux requetes sql UPDATE.
L'une qui mettra à jour quand DateEmprunt sera égale à Date.
L'autre qui mettra à jour (avec l'autre formule) quand DateEmprunt sera différent de date.

Une requête de mise à jour s'utilise de la manière suivante :

UPDATE <nomtable> SET <champàmodifier> = <nouvelle valeur> WHERE <conditions>

Donc ici tu auras une première requête qui modifiera la valeur de QttDispo1 selon une formule quand la DateEmprunt sera égale à la date du jour/
Et une autre lorsque les dates seront différentes.

Dim Db As Database
Set Db = CurrentDb
Dim requete As String

'Première requête, quand DateEmprunt = Date requete "UPDATE MATERIEL SET QttDispo1 stockinitial + entrees - QttEmpruntee WHERE DateEmprunt = '" & Date & "'"

db.Execute (requete)

'Deuxieme requeterequete "UPDATE MATERIEL SET QttDispo1 stockinitial + entrees WHERE DateEmprunt <> '" & Date & "'"

db.Execute (requete)



PS: je n'ai pas Access pour tester donc peut être que la syntaxe avec les dates n'est pas la bonne ... je ne sais plus s'il faut mettre des ##.

Mais est-ce qu'une méthode comme ça te conviendrait ?

Fanny
0
acorna Messages postés 53 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 23 mars 2005
11 juin 2004 à 14:26
oui, tout marche :big)
Un grand merci ;o)
0

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

Posez votre question
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
11 juin 2004 à 14:30
Ah c'est cool alors :big)

Fanny
0
Rejoignez-nous