Vba - access

Résolu
cs_pitros Messages postés 45 Date d'inscription mardi 11 octobre 2005 Statut Membre Dernière intervention 1 juin 2010 - 20 janv. 2006 à 17:02
cs_pitros Messages postés 45 Date d'inscription mardi 11 octobre 2005 Statut Membre Dernière intervention 1 juin 2010 - 29 janv. 2006 à 20:09
Bonjour

J'ai une table produit avec une entité "quantité en stock". J'aimerais
lorsque je valide une facture que les quantités se mette a jour: par
exemple si je commande 6 produit et que j'en ai 10 en stock, j'aimerais
apres avoir valider la facture qu'il y en reste plus que 4 ... Voila.

ps: on m'a dit d'utilisé ce qui suit mais je comprend pas grand chose ...



Private Sub Commande6_Click()




Dim Bd As Database, Rs As
Recordset








Set Bd = Application.CurrentDb




Dim StrReq As String






Set Rs = Bd.OpenRecordset("……………………………………), dbOpenDynaset)






StrReq = "……………………………………………………………………….






DoCmd.RunSQL StrReq






Set Rs = Nothing




Set Bd = Nothing

7 réponses

cs_pitros Messages postés 45 Date d'inscription mardi 11 octobre 2005 Statut Membre Dernière intervention 1 juin 2010
29 janv. 2006 à 20:09
Private Sub Commande_Click()

Set Bd = Application.CurrentDb

Dim StrReq As String





Set Rs = Bd.OpenRecordset("SELECT N°PRODUIT FROM LIGNE_FACTURE WHERE N°FACTURE=" & CStr(Me.N°FACTURE), dbOpenDynaset)





StrReq "UPDATE PRODUIT INNER JOIN LIGNE_FACTURE ON PRODUIT.N°PRODUIT
LIGNE_FACTURE.N°PRODUIT SET PRODUIT.QTESTOCK =
[QTESTOCK]-[LIGNE_FACTURE].[QTÉ_COMMANDÉ] " & _

"WHERE LIGNE_FACTURE.N°FACTURE=" & Me.N°FACTURE



DoCmd.RunSQL StrReq





Voila la réponse qui marche enfin !Merci a tous pour votre aide !



Set Rs = Nothing

Set Bd = Nothing

End Sub
3
ufufy Messages postés 46 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 13 avril 2007
20 janv. 2006 à 17:09
Et bien grosso modo la personne te fait executer une requette. dans le strReq il faut mettre une requette SQL qui va bien, cad qui effectue la mise a jour de ta table. il n'y a plus qu'a te renseigner sur la syntaxe du langage sql...
0
cs_pitros Messages postés 45 Date d'inscription mardi 11 octobre 2005 Statut Membre Dernière intervention 1 juin 2010
21 janv. 2006 à 10:37
Private Sub Commande_Click()

Dim Bd As Database, Rs As Recordset





Set Bd = Application.CurrentDb

Dim StrReq As String



Set Rs = Bd.OpenRecordset("SELECT N°PRODUIT From PRODUIT WHERE N°FACTURE=" & CStr(Me.N°FACTURE), dbOpenDynaset)



StrReq = "UPDATE PRODUIT INNER JOIN LIGNE_FACTURE ON
PRODUIT.N°PRODUIT LIGNE_FACTURE.N°PRODUIT SET PRODUIT.QTESTOCK
[QTESTOCK].[LIGNE_FACTURE].[Quantité commandé]" & "WHERE
LIGNE_FACTURE.N°FACTURE=" & Me.N°FACTURE



DoCmd.RunSQL StrReq



End Sub



Voila ce que j'ai reussi a faire mais il me trouve encore une erreur sur cette ligne

Set Rs = Bd.OpenRecordset("SELECT N°PRODUIT From PRODUIT WHERE
N°FACTURE=" & CStr(Me.N°FACTURE), dbOpenDynaset) ... Je ne
comprends pas d'ou vient mon erreur ...
0
ufufy Messages postés 46 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 13 avril 2007
21 janv. 2006 à 18:49
Private Sub Commande_Click()
Dim Bd As Database, Rs As Recordset -> la tu déclare ta base et ton jeu d'enregistrement
Set Bd = Application.CurrentDb ->la tu dit que c dans la base "courante"
Dim StrReq As String -> la tu déclare la chaine de caractere qui servira de support a ta requette SQL
Set Rs = Bd.OpenRecordset -> la tu ouvres ton jeu d'enregistrement (il ne faut pas mettre la requette ici) StrReq "UPDATE PRODUIT INNER JOIN LIGNE_FACTURE ON PRODUIT.N°PRODUIT LIGNE_FACTURE.N°PRODUIT SET PRODUIT.QTESTOCK =[QTESTOCK].[LIGNE_FACTURE].[Quantité commandé]" & "WHERE LIGNE_FACTURE.N°FACTURE=" & Me.N°FACTURE
-> la tu met ta requette SQL dans strReq
DoCmd.RunSQL StrReq -> la tu execute la requette SQL

End Sub

pas contre je viens de tilter... si tu veux juste faire un nouvel enregistrement dans ta base, ou simplement une mise a jour il te suffit de faire
Private Sub Commande_Clic()

DoCmd.SetWarnings False (pour désactiver les messages d'avertissement de mise a jour de l'enregistrement dans la table)
DoCmd.RunSQL ("UPDATE PRODUIT INNER JOIN LIGNE_FACTURE ON PRODUIT.N°PRODUIT LIGNE_FACTURE.N°PRODUIT SET PRODUIT.QTESTOCK[QTESTOCK].[LIGNE_FACTURE].[Quantité commandé]" & "WHERE LIGNE_FACTURE.N°FACTURE=" & Me.N°FACTURE)

End Sub

Je pense kon se prend le chou pour des cacahuettes quoi...
le set bordel truc muche c pour acceder a ta base, en lecture, si tu veux recuperer des enregistrement pour les afficher dans le formulaire en fait.

tiens moi au courant !
0

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

Posez votre question
cs_pitros Messages postés 45 Date d'inscription mardi 11 octobre 2005 Statut Membre Dernière intervention 1 juin 2010
23 janv. 2006 à 12:59
quand je met ton code que tu viens de me donner... je doit entrer la
valeur de " qtestock.ligne_facture.quantité commandé" ...alors que
normalement tout doit se faire tout seul quand je clique sur le bouton
....
0
ufufy Messages postés 46 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 13 avril 2007
23 janv. 2006 à 14:24
cette ligne pose pbm:
[QTESTOCK].[LIGNE_FACTURE].[Quantité commandé]
je n'avais pas prété attention au contenu de la requette mais ce n'est pas possible un qqchose.untruc.bidule en SQL. D'ou le fait qu'il te demande sa valeur!

Si c'est un controle de ton formulaire il faut ecrire:
DoCmd.RunSQL ("UPDATE PRODUIT INNER JOIN LIGNE_FACTURE ON PRODUIT.N°PRODUIT LIGNE_FACTURE.N°PRODUIT SET PRODUIT.QTESTOCK" & [QTESTOCK].[LIGNE_FACTURE].[Quantité commandé] & " WHERE LIGNE_FACTURE.N°FACTURE=" & Me.N°FACTURE)

Selon quelle type de données renferme le [QTESTOCK].[LIGNE_FACTURE].[Quantité commandé] il faut ajouter des ' de chaque coté (c'est a dire apres le = et avant le WHERE) mais je crois que ce n'est pas la peine pour une valeur numérique.

pour de plus amples informations a propos du SQL: http://membres.lycos.fr/sqlpro/
dans le menu "SQL de A a Z" de gauche tu regardes a "inserer modifier supprimer"

pour vérifier la validité de ta requette, dans access (pas dans VBA) tu crée une nouvelle requette et tu essaye de l'executer avec le point d'exclamation rouge (bien evidemment tu ne peux pas y mettre des valeurs a récuperer dans un formulaire, il faut mettre des valeurs fictives pour tester la structure de la requette). Tant que cela ne donne pas le resultat escompté c'est que la requette pose un pbm, une fois que c'est OK tu fait DoCmd.RunSQL (" ta requette qui va bien") dans don code VBA
0
ufufy Messages postés 46 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 13 avril 2007
23 janv. 2006 à 14:32
PS:Plus amples explication sur pourquoi la requette ne marche pas et pourquoi maintenant ca devrai rouler

en fait quand tu écrit une requette SQL, VBA lui ne sait pas ce que c'est, pour VBA c'est juste une chaine de caractères, c'est pourquoi on la met entre guillement " ", mais si dans ta requette tu veux récuperer des valeurs de ton formulaire, ca VBA les connait, et il ne faut pas les mettre entre guillement, du coup ca donne du:

DoCmd.RunSQL ("debut de ma requette" & valeur de mon formulaire & "fin de ma requette")

mais valeur de mon formulaire, seul VBA sait ce que c'est... si tu execute une requette DoCmd.RunSQL ("debut de ma requette valeur de mon formulaire fin de ma requette") et bien grosso modo SQL va te dire atta mon gars tu me parle de la valeur de ton formulaire... mais c'est quoi?

Il me semble que dans ta requette un des " etait au mauvais endroit, voila pourquoi ca ne marchait pas.

J'ai été assez claire la??? parceque je viens de faire un roman!!!!!!!

(si apres ca ca ne fonctionne toujours pas je mange mon PC)
0
Rejoignez-nous