good speed
Messages postés35Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention 9 avril 2008
-
30 mars 2008 à 12:29
good speed
Messages postés35Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention 9 avril 2008
-
9 avril 2008 à 12:38
Bonjour, je travails sous ACCESS 2003
J'essais de mettre à jour le champ [MAJ Quantite] de la table "Taille Stock" avec du vb code
mais rien ne se produit, ni le resultat escompté, ni erreur signalée par access.
Ci-dessous les deux tables Vente et " Taille stock" ainsi que le code vb
A signaler que le code est placer dans le formulaire Vente sur " apres mise à jour" event
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 30 mars 2008 à 14:06
Bonjour,
aucune idée sur le problème mais une suggestion.
Si tu comptes utiliser un recordset, autant en utiliser deux.
L' un vers TaillesStock, tu récupère la reference et la taille.
(vRefernce, vTaille)
L' autre vers Selection de vente where Reference=vRefernce et Taille=vTaille order by Date.
Et dans une boucle tu parcours Rs1 , et dans une autre Rs2,
et tu met à jour TailleStock.MAJQte à chaque itération
ps: n' oublies pas ma réponse dans l' ancien topic.
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
/PRE>
sbeihassen
Messages postés2Date d'inscriptionmardi 10 mars 2009StatutMembreDernière intervention30 mars 2008 30 mars 2008 à 14:22
sbeihassen
les mot en gras sont les codes correctes
Private Sub Form_AfterUpdate()
' If an error occurs, jump down to the DataAccessError section.
On Error GoTo DataAccessError
' Create a SELECT command.
Dim Query As String
Query = "SELECT Reference, Taille, Quantite FROM Vente ici il vous monque la codition WHERE "
' Get a recordset using this command.
Dim RS As DAO.Recordset
Set RS = CurrentDb.OpenRecordset(Query)
' Move through the recordset, looking at each record.
' Each record is a separate item in the order.
Do Until Recordset.EOF
' For each item, get the product ID and quantity details.
Dim vReference As String
Dim vTaille As String
Dim vQuantite As Long
vReference = Recordset .fields ("Reference")
vTaille = Recordset.fields("Taille")
vQuantite = Recordset .fields ("Quantite")
' Using this information, create an UPDATE command that
' changes the Size and stock levels.
Dim UpdateCommand As String
UpdateCommand "UPDATE Taille_Stock SET [MAJ<gras>_Quantite]</gras> Quantite -" & vQuantite & " WHERE Reference =" & vReference And "Taille =" & vTaille
' Run the command.
CurrentDb.Execute UpdateCommand
' Move to the next order item (if there is one).
Recordset.MoveNext
Loop
' Time to clean up.
Recordset.Close
Exit_Block:
Exit Sub
DataAccessError:
' You only get here if an error occured.
' Show the error.
MsgBox Err.Description
Resume Exit_Block
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 30 mars 2008 à 15:46
SELECT Reference, Taille, Quantite FROM Vente ici il vous monque la codition WHERE...
te renvoie plusieurs lignes.
TaillesStock quantité va être mise à jour par quelle quantité de vente avec ta requete "Update TailleStock.... ???
vReference=Reference And vQuantité=Quantite ne suffisentt pas.
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
/PRE>
good speed
Messages postés35Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention 9 avril 2008 31 mars 2008 à 20:21
Salut,
Merci pour vos reponses,
Malheureusement, j'ai fais les modifications suggérées de votre part mais toujours pareil, càd, ni erreur, ni changement sur [Taille Stock]![MAJ Quantite]
voici le code, en rouge les modifications: ---------------------------------------------------------------------------------------------------
Private Sub Form_AfterUpdate()
' If an error occurs, jump down to the DataAccessError section.
On Error GoTo DataAccessError
' Create a SELECT command.
Dim Query As String
Query "SELECT Reference, Taille, Quantite FROM Vente WHERE Reference" & Me.Reference & "and Taille =" & Me.Taille
' Get a recordset using this command.
Dim RS As DAO.Recordset
Set RS = CurrentDb.OpenRecordset(Query)
' Move through the recordset, looking at each record.
' Each record is a separate item in the order.
Do Until Recordset.EOF
' For each item, get the product ID and quantity details.
Dim vReference As String
Dim vTaille As String
Dim vQuantite As Long
vReference = Recordset.Fields("Reference").Value
vTaille = Recordset.Fields("Taille").Value
vQuantite = Recordset.Fields("Quantite").Value
' Using this information, create an UPDATE command that
' changes the Size and stock levels.
Dim UpdateCommand As String
' de moi meme j'ai aussi changé Taille_Stock en [Taille Stock]UpdateCommand "UPDATE [Taille Stock] SET [MAJ Quantite] Quantite -" & vQuantite & " WHERE Reference =" & vReference And "Taille =" & vTaille
' Run the command.
CurrentDb.Execute UpdateCommand
' Move to the next order item (if there is one).
Recordset.MoveNext
Loop
' Time to clean up.
Recordset.Close
Exit_Block:
Exit Sub
DataAccessError:
' You only get here if an error occured.
' Show the error.
MsgBox Err.Description
Resume Exit_Block
End Sub
---------------------------------------------------------------------------------------------------
Libre_Max: j'ai pas compris comment utiliser deux recordset pour mon cas.
Aussi, la requete mise à jour ...
UpdateCommand "UPDATE Taille_Stock SET [MAJ Quantite] Quantite -"
& vQuantite & " WHERE Reference =" & vReference And "Taille
=" & vTaille
Est sensée mettre à jour [Taille Stock]![MAJ Quantite] en deduisant le recordset vQuantite de [Taille Stock]![Quantite] et ce, seulement quand les deux conditions sont reunies càd
WHERE Reference =" & vReference And "Taille
=" & vTaille
Exple: Voir les tables du projets plus haut...
Quand : Vente.Reference Ref1 et Vente.Taille 3940 ( c'est la taille d'une chemise, juste pour info)
on voit que Quantite = 1
et à ce stade dans le code ces données sont sensées etre regroupées ainsi :
vReference = Ref1
vTaille = 3940
vQuantite = 1
Alors Apres que le rcordset a parcouru cet enregistrement
Mise à jour requise de ACCESS ( s'il veut bien)
Je demande à access de mettre à jour [MAJ Quantite] comme suit:
Quand tu lui dis de mettre à jour TaillesStock en ajoutant Quantité,
il ne sait pas si c' est celle de la première ligne ou la deuxième.
(imagines ensuite si tu as plusieurs ventes de la même Ref et la même taille.)
Et donc tu dois trier le résultat de ta requete sur l' ordre de vente TdVente.Puis parcourir cette requete et lire lire par ligne et mettre à jour TailleStock avec la quantité de la ligne courante.
C' est ça le RS2 dont je parlais.
Au lieu donc de ta requete mise à jour tu fais un Edit puis update
à chaque itération de la boucle RS2 imbriquée.
ps: tu te souviens de SommeDeQte ?
Eh bien la requete regroupement te renvoie une ligne par ref et taille.
Mais question:
Pourquoi tu ne mets pas à jour TailleStock.Quantité au moment de la vente ?
Quand tu es sur un BL, tu n' as qu' une ligne par Ref et Taille.
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
/PRE>
good speed
Messages postés35Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention 9 avril 2008 3 avril 2008 à 20:27
Bonsoir,
Justement comme tu me l'as preconisé en dernier, c'est comme ca que j'ai procedé, car sur mon formulaire
j'ai Reference, Taille, Quantite et autres données et donc les enregistrements sont traités un par un or la procedure n'est appelées à s'executer qu'apres validation de chaque operation, et qu'apres avoir seulement appuyé sur le bouton suivant lequel marque l'evenement " Mis à Jour" et moi j'appel la procedure sur l'evenement " Apres mise à jour" Donc sur Apres mise à jour j'ai qu'une seule ligne d'enregistrement or je precise à ACCESS de selectionner : Query "SELECT Reference, Taille, Quantite FROM Vente WHERE Reference " & Me.Reference & "and Taille = " & Me.Taille
et en utilisant les donnés de cette selection de mettre à jour la table taille_Stock : UpdateCommand "UPDATE [Taille Stock] SET [MAJ Quantite] Quantite -" & vQuantite & " WHERE Reference =" & vReference And "Taille =" & vTaille
Et comme tu peux bien le voir la condition where est la meme pour la Requete selection et Requete mise à jour, et comme je l'ai mentionné plus haut, sur le formulaire les données sont Affichées et traitées ligne par ligne, et enregistrement par enregistrement.
Pour la requete Tdvente que
tu me preconise de créer j'ai bien compris comment faire, mais pour
l'utiliser dans un 2em RS j'ai du mal à voir surtout que je comprends
pas ...à chaque itération de la boucle RS2 imbriquée, et puis entre nous, un RS ca passe pas alors deux!
Merci mon ami
PS: c'est par erreur si j'ai pas posté mon probleme sur le bon forum, mais comme la discussion est déjà entammée et que c'est souvent notre ami Libre_Max qui repond alors je prefere rester enocre sur se forum, si ca vous derange pas biensur.
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 3 avril 2008 à 22:34
Bonsoir,
j'ai qu'une seule ligne d'enregistrement or je precise à ACCESS de selectionner : Query "SELECT Reference, Taille, Quantite FROM VenteWHERE Reference" & Me.Reference & "and Taille =" & Me.Taille
Tu dois donc parcourir cet ensemble d' enregistrements.
Ah si tu m' avais écouté et modifier la structure de vente
en remplaçant Reference et Taille par ID, tu n' en serais pas là.Ni dans le premier post ni dans celui-ci.
ça t' évitera au moins la double jointure.
Car en définitif, à quoi servirait un Identifiant (clé primaire) d' un article s' il n' est pas utilisé comme clé secondaire dans ta table vente ?
PS:
en relisant ton premier post, j' ai relevé ceci:
Dim RS As DAO.Recordset
Set RS = CurrentDb.OpenRecordset(Query)
' Move through the recordset, looking at each record.
' Each record is a separate item in the order.
Do Until Recordset.EOF
c' est plitôt:
Do While Not RS.Eof
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
/PRE>
good speed
Messages postés35Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention 9 avril 2008 7 avril 2008 à 12:14
Bonjour,
Dabord, je m'excuse pour le retard, problemes de system...
J'ai déjà essayé de m'en servir du champ venteID de la table vente et du ID de la table
Taille_Stock, mais voilà!, la table Taille_Stock est elle meme une table de JONCTION,
et puis j'ai pensé qu'effectivement à quoi ca sert d'avoir une clé primaire dans la table vente
si elle n'est pas utile, mais le problem dans mon code, et dans la requete selection de la table vente est commme ceci:Query "SELECT Reference, Taille, Quantite FROM Vente WHERE VenteID à quoi ????
l'ideal c de remplacer la reference et taille au meme temp par un ID unique mais les deux se trouvent dans deux tables differentes.
Il y a aussi un souci de rapidité d'execution des ventes, je m'explique, si j'avais inseré le ID de la table Taille_Stock dans la table Vente Apres avoir relié les deux tables, sur le formulaire
vente le champ ID en question ne serais pas inseré automatiquement à chaque nouvel enregistrement, or il faudrait le choisir dans une liste deroulante à chaque vente, d'ou une lenteure consequente.
Et puis franchement une proposition de configuration de votre part à meme d'ameliorer mon application serait la bienvenue
Enfin, j'ai essayé de changer Do until Recordset.EOF par Do While Not RS.Eof
et puis pour mise à jour voici le code :
---------------------------------------------------------
Option Compare Database
Option Explicit
------------------------------------------------------------------------------------
Private Sub Form_AfterUpdate()
' If an error occurs, jump down to the DataAccessError section.
On Error GoTo DataAccessError
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim UpdateCommand As String
Dim Query As String
Dim vReference As String
Dim vTaille As String
Dim vQuantite As Long
' Create a SELECT command.
Query = "SELECT Reference, Taille, Quantite FROM Vente Where Reference=" & Me.Ref_General & "and taille=" & Me.Taille
' Get a recordset using this command.
Set DB = CurrentDb()
Set RS = DB.OpenRecordset(Query)
' Move through the recordset, looking at each record.
' Each record is a separate item in the order.
'Do Until RS.EOF
Do While Not RS.EOF
' For each item, get the product Reference, Size and quantity details.
vReference = RS("Reference")
vTaille = RS("Taille")
vQuantite = RS("Quantite")
' Using this information, create an UPDATE command that
' changes the Quantity of product size level.UpdateCommand "UPDATE [Taille Stock] SET [MAJ Quantite] Quantite -" & _
vQuantite & " WHERE Reference =" & vReference & " And Taille =" & vTaille
' Run the command.
DB.Execute UpdateCommand
' Move to the next order item (if there is one).
RS.MoveNext
Loop
' Time to clean up.
RS.Close
Set RS = Nothing
Set DB = Nothing
Exit_Block:
Exit Sub
DataAccessError:
' You only get here if an error occured.' Show the error.
MsgBox Err.Description
Resume Exit_Block