Moulinette sous Access

Résolu/Fermé
microsoluces - 8 oct. 2006 à 07:57
microsoluces Messages postés 35 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 7 juillet 2014 - 11 oct. 2006 à 13:38
Salut à tous...
Je suis tout nouveau sur Access et je viens chercher un peu d'aide ici n'en ayant pas trouvé dans mes bouquins...
Voila j aimerai mettre à jour toutes les semaines une table "PRODUITS"(code[clé primaire], libelle,Q_stock, HT) à partir d'une autre table "FOURNISSEUR"(structurée par mes soins dans le même format).
J ai crée en SQL une requête qui ajoute les nouveaux articles "FOURNISSEUR"(j’ai juste un message d'erreur sur les articles déjà existants dans ma table "PRODUITS"= Doublons, mais ça marche)

INSERT INTO PRODUITS ( CODE, LIBELLE, STOCK, HT )
SELECT CODE, LIBELLE, STOCK, HT
FROM FOURNISSEUR
WHERE HT>0;

J ai crée en SQL également une requête suppression pour ne pas mettre à jour les articles de ma table "PRODUITS" que j avais en stock (>=1) et éviter de vendre à perte...

DELETE STOCK
FROM PRODUITS
WHERE STOCK>=1;


Mais les requêtes qui me posent le plus de problèmes sont celles des mises à jour : J aimerai mettre à jour les articles de "PRODUITS" en cas de hausse du HT "FOURNISSEUR" ou en cas de baisse (donc sur 2 requêtes distinctes pour mieux contrôler mes tarifs).

J'espère avoir été clair. Merci par avance à tous ceux pouvant me donner une piste.

Quant à moi j'y retourne ...

14 réponses

blux Messages postés 26019 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 mai 2024 3 289
9 oct. 2006 à 11:13
Salut,

il faut utiliser UPDATE :
UPDATE PRODUITS SET HT = HT*1,05 WHERE LIBELLE LIKE "toto*";
Cette requête augmente les prix de 5% de tous les articles dont le libellé commence par "toto"...

Pour une baisse de tarif, c'est la même chose, seule l'opération à faire change : HT=HT*0,95...
0
microsoluces Messages postés 35 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 7 juillet 2014 4
9 oct. 2006 à 11:42
Je te remercie pour l'info mais la requète que tu me donnes augmente ou diminue TOUS les HT de ma table "PRODUIT". Or je cherche à mettre à jour uniquement les produits ayant subit soit une hausse, soit une baisse depuis la table que me donne mon fournisseur chaque semaine !

Je dois comparer les articles d'une table à une autre par l'intermédiaire de leur code article (clé primaire). Quand le code est identique on compare les HT... La mise à jour se fait SI la quantité en stock de "PRODUIT" est =0 (pour éviter de modifier les prix des articles déjà en stock).

Simple à dire, mais à faire sous ACCESS ! ! !

Je me demande si je n'aurai pas intérêt à faire ça avec un langage de programmation (Windev, VisualBasic)

A +
Et merci d'avance à mon sauveur !
0
blux Messages postés 26019 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 mai 2024 3 289
9 oct. 2006 à 12:59
UPDATE PRODUITS SET HT = HT.FOURNISSEURS WHERE STOCK = 0 AND CODE = CODE.FOURNISSEURS ;

Ca marcherait pas un truc comme ça ?
0
microsoluces Messages postés 35 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 7 juillet 2014 4
9 oct. 2006 à 14:43
On avance... La syntaxe me plait bien, ca ressemble à ce que je veux faire, mais ACCESS lui, il n aime pas du tout !
Un pop up me demande de saisir le HT.FOURNISSEUR, puis le HT, puis le CODE et enfin me dit que les champs n a pas pu etre mis à jour.....
0

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

Posez votre question
blux Messages postés 26019 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 mai 2024 3 289
9 oct. 2006 à 15:33
Rajoute FOURNISSEURS dans la liste des tables à mettre à jour, même si on ne fait rien dessus, ça lui indique qu'elle fait partie du bin's qu'on essaie de faire :
UPDATE PRODUITS, FOURNISSEURS SET HT = HT.FOURNISSEURS WHERE STOCK = 0 AND CODE = CODE.FOURNISSEURS ;

J'ai testé chez moi (ACCESS 2002), ça marche...
0
microsoluces Messages postés 35 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 7 juillet 2014 4
9 oct. 2006 à 17:21
Merci pour toute la peine que tu te donnes pour moi, mais hélas cela ne fonctionne pas. J ai également ACCESS 2002. Voila mes tables :

PRODUITS
CODE__LIBELLE____STOCK_____ HT_________ TYPE
__1___Produit 1_____ 1______ 100,00_____Carte mère
__2___Produit 2_____ 1______ 100,00_____Processeur
__3___Produit 3_____ 1 ______100,00_____Mémoire



FOURNISSEUR
CODE____LIBELLE________ HT
__1___ Pdt 1___________200,00 (hausse)
__3___ Produitsxxx 3____ 50,00 (article 2 disparu)(Baisse pour le 3)
__4___Produit 4________ 700,00 (nouvel article)




RESULTAT ATTENDU =>



PRODUITS
CODE__LIBELLE____STOCK_____ HT_________ TYPE
__1___Produit 1_____ 1______ 200,00_____Carte mère
__3___Produit 3_____ 1_______ 50,00_____Processeur
__4___Produit 4_____ 0 ______700,00_____0



L'interet de la moulinette c'est :
1- On ne touche pas aux libelles de PRODUITS que j'ai modifié 1 par 1.
(Suppression abréviations, libelles plus clairs)
2- Chaque article de "PRODUIT" à un type. Si je balancais la table "FOURNISSEUR" dans ma gestion commerciale, je devrais ré affecter un type à chacun de mes 3800 produits ! ! !


Je demande l'impossible non ?
A +
0
blux Messages postés 26019 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 mai 2024 3 289
9 oct. 2006 à 17:33
Faudrait juste me dire quel est le résultat que tu obtiens, car ça devrait logiquement marcher... à l'exception près qui est qu'on ne crée pas de nouveau produit, c'est une requête de mise à jour de champs dans une ligne existante (UPDATE), pas une requête ajout (INSERT INTO)...

Je demande l'impossible non ?
Non, c'est facile à faire ,et si en SQL classique ça marche pas, on fera du VBA...
0
microsoluces Messages postés 35 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 7 juillet 2014 4
9 oct. 2006 à 17:40
J'ai recopié ta requete dans access. Il me dit =
"Le champ spécifié 'CODE' peut designer plusieurs tables listées dans la clause FROM de votre instruction SQL"

Késako ?


Au fait :
Je n'ai crée aucun lien entre mes tables. C'est bon ?
0
blux Messages postés 26019 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 mai 2024 3 289
9 oct. 2006 à 17:53
Je n'ai pas mis de FROM dans ma requête...
UPDATE PRODUITS, FOURNISSEURS SET HT = HT.FOURNISSEURS WHERE STOCK = 0 AND CODE = CODE.FOURNISSEURS ;


Sinon tu modifies :
UPDATE PRODUITS, FOURNISSEURS SET HT.PRODUITS = HT.FOURNISSEURS WHERE STOCK.PRODUITS = 0 AND CODE.PRODUITS = CODE.FOURNISSEURS ;

0
microsoluces Messages postés 35 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 7 juillet 2014 4
9 oct. 2006 à 18:21
Je n ai pas mis FROM, c est ACCESS qui corrige seul la syntaxe à la manière de FRONTPAGE qui corrigeait mes pages html ! ! !

Quand je rentre ton dernier SQL j ai à l'execution de la requete une box qui s ouvre et me demande :
"Entrez la valeur du paramètre"
"HT.FOURNISSEUR"

Je rentre 1 par exemple, une autre fenetre s ouvre

"Entrez la valeur du paramètre"
"HT.PRODUIT"

Idem stock, idem code et tout cela fini par
"L'opération doit utiliser une requete qui peut etre mise à jour"


JE COMMENCE A DOUTER QU ON PUISE LE FAIRE AVEC ACCESS pourtant cela ne semble pas tres compliqué au premier abord !
0
blux Messages postés 26019 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 mai 2024 3 289
10 oct. 2006 à 09:16
JE COMMENCE A DOUTER QU ON PUISE LE FAIRE AVEC ACCESS pourtant cela ne semble pas tres compliqué au premier abord !
On peut le faire, je l'ai testé chez moi...

Comment saisis-tu ta requête ? (assistant, mode sql...). Je pense que le problème vient de là...

Sinon, tu peux m'envoyer ta base, je regarderai...
0
microsoluces Messages postés 35 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 7 juillet 2014 4
10 oct. 2006 à 16:27
Salut,

Effectivement je m y prend peut etre mal. Je crée une requete en mode création, je ferme la fenetre qui s ouvre "Afficher la table" puis je clic sur le menu affichage et choisi l option SQL...
Ensuite je fais un copier/coller de ton code puis enregistrer...

Comment puis-je t'envoyer ma base ?

Merci d'avance.
0
blux Messages postés 26019 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 mai 2024 3 289
10 oct. 2006 à 16:37
Tu la zippes, tu l'envoies à denis point mail point list chez free point fr...

Et c'est tout...
0
microsoluces Messages postés 35 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 7 juillet 2014 4
10 oct. 2006 à 17:35
Un tel dévouement : j peux rien ajouter. Le must de l'assistance !
Je viens de te l'envoyer.

Bah on dit merci j'crois !

Merci
0
microsoluces Messages postés 35 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 7 juillet 2014 4
11 oct. 2006 à 10:35
Bonjour,
Nous approchons du but Blux...
J'avais fait plein de fautes d'inattention (celles du débutant trop pressé) dans la syntaxe de mon SQL... Ca marche beaucoup mieux effectivement si on respecte le nom des champs.
La requete fonctionne maintenant sans ouvrir de Box pour me demander des valeurs, mais elle ne change aucun élément dans ma table "PRODUIT"

Pour ceux qui nous suivent depuis le début voici comment blux m'a corrigé mon SQL :


UPDATE PRODUIT, FOURNISSEUR SET PRODUIT.HT = FOURNISSEUR.HT
WHERE PRODUIT.STOCK=0 And PRODUIT.CODE=FOURNISSEUR.CODE;
0
blux Messages postés 26019 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 mai 2024 3 289
11 oct. 2006 à 12:38
Sur la base que tu m'as envoyée, j'arrive à mettre à jour si le stock est à 0...

Donc je ne comprends pas ce qui peut se passer...

Te dit-il combien de ligne il va mettre à jour ou alors te contentes-tu de cliquer sur la requête, provoquant un simple affichage...
0
microsoluces Messages postés 35 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 7 juillet 2014 4
11 oct. 2006 à 13:38
Honte à moi... Ca marche bien sur ! ! !

Il faut que les quantités soient à 0.

Je te remercie mille fois pour le boulot ET surtout de ta patience avec un bleu comme moi.... ;-)

Tu n'imagines même pas le temps que va me faire gagner cette chtite moulinette !

A + (dans un prochain post)
Salut.
0