b3rz3k
Messages postés8Date d'inscriptionjeudi 10 février 2011StatutMembreDernière intervention18 mai 2011
-
16 mai 2011 à 13:32
b3rz3k
Messages postés8Date d'inscriptionjeudi 10 février 2011StatutMembreDernière intervention18 mai 2011
-
17 mai 2011 à 16:02
Bonjour,
J'ai un petit problème au niveau de la syntaxe d'un UPDATE,
Je vous explique l'organisation de la table qui pose problème.
J'importe depuis Excel un fichier de travail dans différentes colonnes.
Ce fichier est en gros une gestion d'ecarts de stock, et me donne pour telle date ( année,mois, semaine,) la liste des écarts.
Ces écarts ont des Etats ( PROCESSED (traité) ou OPEN).
Un écart encore en "OPEN" peut resurgir la semaine qui suit ou plus tard et s'il est traité, lors de son introductiondans la table , il ne faut pas oublier de mettre en PROCESSED les autres ecarts qui lui sont identiques.
C'est sur cette étape que je bloque... j'ai fais une macro qui verifie pour un PART ( un produit on va dire) ceux qui lui sont identiques, et s'ils sont identiques, regarder leur Etat, et faire les changements necessaire s'ils sont différents.
Voici le code :
Set db = CurrentDb()
Set LECTURE_CLEF_STOCK = db.OpenRecordset("T_STOCK_ECART")
Set LECTURE_CLEF_STOCK2 = db.OpenRecordset("T_STOCK_ECART")
NB = 0
LIGNE = 0
LIGNE2 = 0
LECTURE_CLEF_STOCK.MoveFirst
While Not LECTURE_CLEF_STOCK.EOF
LECTURE_CLEF_STOCK2.MoveFirst
LIGNE = LIGNE + 1
While Not LECTURE_CLEF_STOCK2.EOF
LIGNE2 = LIGNE2 + 1
VARIABLE_CLEF = LECTURE_CLEF_STOCK.Fields(1)
VARIABLE_CLEF2 = LECTURE_CLEF_STOCK2.Fields(1)
VARIABLE_STATE = LECTURE_CLEF_STOCK.Fields(18)
VARIABLE_STATE2 = LECTURE_CLEF_STOCK2.Fields(18)
If VARIABLE_CLEF VARIABLE_CLEF2 And VARIABLE_STATE "OPEN" And VARIABLE_STATE2 = "PROCESSED" And LIGNE <> LIGNE2 Then
VARIABLE_STATE = VARIABLE_STATE2
DoCmd.RunSQL ("UPDATE T_STOCK_ECART Set STATE_STOCK.Name & VARIABLE_STATE & ") NB NB + 1
End If
LECTURE_CLEF_STOCK2.MoveNext
Wend
LECTURE_CLEF_STOCK.MoveNext
Wend
c'est la ligne où il y a le UPDATE qui me paraît douteuse.. car à aucun moment je lui précise une ligne pour la mise à jour et je ne sais pas comment faire.
En executant mon programme, il me demande une valeur de mise à jour et ne tien pas en compte ma variable VARIABLE_STATE qui vaut OPEN ou PROCESSED
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 16 mai 2011 à 20:49
Ah bah non, même pas.
Tu as tous tes enregistrements dans tes RecordSets.
Il te suffit de modifier le contenu puis de faire un Update sur le RecordSet, pas au travers d'une requète.
Il te reste à désigner lequel des deux tu veux mettre à jour, mais il ne faudra le faire que sur un seul puisqu'ils pointent tous les deux sur la même table.
(tes noms d'objets et de variables sont pas terribles)
LECTURE_CLEF_STOCK.Fields(18)
ou mieux et plus compréhensible
LECTURE_CLEF_STOCK![STATE_STOCK] = VARIABLE_STATE
LECTURE_CLEF_STOCK.Update
mais ce serait plutôt le RecordSet 2 qu'il faudrait toucher, mais je comprends pas trop ce que tu fais, alors je te laisse raisonner.
NB : Si ce champ est de type texte, il faut encadrer la valeur par des apostrophes '
De plus, je pense qu'elle est incomplète.
Un Update dans lequel on ne précise pas de Where risque fort de mettre à jour tous les champs de ta table. Il faut lui dire quel enregistrement mettre à jour.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
b3rz3k
Messages postés8Date d'inscriptionjeudi 10 février 2011StatutMembreDernière intervention18 mai 2011 16 mai 2011 à 15:00
Salut, merci pour ta réponse,
Le NB = NB + 1 me sert juste d'indicateur, j'ai un msgbox après pour me dire combien de fois il est rentré dans le IF.c'est juste que quand j'ai copié mon code il est passé sur la même ligne que ma requête...
Sinon voilà, je crois que tu m'a bien eclairé, je vais faire un Where ( ??? = LIGNE2)
en faite ce qu'il me manque c'est la commande qui remplace les ??? est qui me permet de savoir à quel ligne se trouve mon