OVH Cloud OVH Cloud

Mettre à jour une table avec le contenu d'une requete

23 réponses
Avatar
Txl
Bonjour =E0 tous,

J'ai un form qui me lance un requete pour connaitre la quantit=E9 de
composants n=E9cessaires pour fabriquer un certain produit.

Par contre je bloque comme un ane et je n'arrive pas =E0 mettre le stock
de composants =E0 jour...

Donc ma table composants tblcomposant contient une ligne de ref
composant (par ex 1548) et cette ref de composant =E0 un stock (21)

Sachant que j'ai une requete qui me sort le code ref et la quantit=E9
necessaire, mais comment faire une requete qui ferait "stock=3Dstock-qte
necessaire" et qui mettrait =E0 jour avec la bonne ref.

j'ai essay=E9 de faire une requete de mise =E0 jour mais ca m'a dit que ca
allait effacer la table tblcomposant et ca m'a fait un peu peur :)

Merci d'avance

10 réponses

1 2 3
Avatar
Txl
Bonjour,

EN fait mon stock est en théorie juste, j'ai fait un inventaire, quand
je commande des pièces à un fournisseur c'est stocké dans la base dan s
une table de commande fournisseur et quand la commande arrive c'est
validé "tu as commandé 12 rondelles, le colis ets arrivé il y a 12
rondelles, je rajoute 12 rondelles au stock"

Par contre quand un client me commande un produit "ABC" je liste les
rondelles, boulons et écrous qu'il me faut pour faire le ABC (j'ai une
table de nomenclature) et je sors ca du stock, donc ma requete va
regarder ce qu'il me faut pour faire un ABC et multiplier les nombre
de rondellles par la quantité de ABC que je veux, pareil pour les
écrous et les boulons, donc je me retrouve aec un résultat de requete
qui contient la ref de la rondelle, la quantité TOTALE que je vais
utiliser dans cette commande et je vire ca du stock, sauf que je
n'arrive pas à le virer du stock...

La ou ca se complique c'est que je peux FABRIQUER des ABC mais je peux
aussi RESTAURER des ABC, si tu en as acheté un il y a 5 ans et que je
le répare je vais changer certaines pièces, mais pas d'autres, donc
j'ai une nomenclature de fabrication (fab) et une nomenclature de
restauration (res), ensuite j'enlève de mon stock totqteres si je fais
une resto ou totqtefab si je fais une fabrication.

Pour le PS j'essaie de t'expliquer.

Un form frmdispo me permet de choisir le modèle (par ex ABC) puis la
quantité que je veux faire puis un bouton bascule fabrication ou
restauration
donc le champ totqteres est le produit de la quantité à fabriqur ou a
restaurer multiplié par la qte qu'on a défini dans le form...

J'espère que c'est clair et je suis sur que j'aurais pu le faire
différement mais je suis TRES MAUVAIS aveac les dlookup donc je ne m'y
aventure pas trop, et j'ai tjs ce pb de requete qui me dit qu'elle
doit etre modifiable

Merci d'avance



Bonjour,

Txl a écrit :

> Bonjour,

> Les entrées sont calculées bien avant, j'ai un form de réception de
> commande fournisseur qui valide la commande fournisseur passée
> auparavant genre

> 12 rondelles commandées et le form de réception de commande m'affic he
> par défaut 12 rondelles recus, l'utilisateur vérifie qu'il y en a b ien
> 12 et valide la réception de commande, ca lance une requete qui met à
> jour le stock.

Ben pourquoi tu mets à jour le stock puisque tu as tous les élément s
  pour calculer ton stock à la demande (requête de regroupement sur la
  référence du produit avec opération de sommation).

> Mais j'ai toujours ce message d'erreur sur la requete de sortie du
> stock sur une demande de fabrication....

Bien que je ne sois pas d'accord avec ta façon de procéder, pourquoi
  tu utilise une requète pour calculer [totqtefab] utilise plutot une
  fonction de domaine (DLookup) pour récupérer le nombre nécessai re de
  composant que tu multiplieras par le nombre de produit à produire.

PS:Tu peux expliquer la finalité de ce champ calculé  :
[qteres]*[forms]![frmdispo]![qte] AS totqteres





> Merci

>> Bonjour,

>> Txl a écrit :

>>> Bonjour à tous,
>>> Donc suivant les conseils de fabien j'ai fait une requete de MAJ qui
>>> prend d'un coté la table composants tblcomposant qui contient les
>>> composants de produits et leur stock et d'un autre coté la requete
>>> rqmajstk qui comporte la liste des composants nécessaires pour
>>> construire un produit (ou 2 ou 3 puisqu'il y a un champ quantité)
>>> UPDATE tblcomposant INNER JOIN rqmajstk ON tblcomposant.refcomp =
>>> rqmajstk.refcomp SET tblcomposant.stk = [stk]-[totqtefab];
>>> Quand je veux executer la requete j'ai une boite d'erreur comme quoi
>>> "L'opération doit utiliser une requete qui peut etre mise à jour" et
>>> je me retrouve bloqué
>>> [stk] est la valeur du stock de composant et [totqtefab] est la
>>> quantité totale de ce composant que je dois sortir du stock (par
>>> exemple pour faire 1 produit il me faut 3 rondelles donc pour faire 3
>>> produits il me fauabrit enlver 9 rondelles du stock) et qui est
>>> calculée par la requete rqmajstk en partant d'un form qui me donne le
>>> modèle de produit que je dois fabriquer et la quantité, pour ré férence
>>> je metes le code SQL de la requete rqmajstk
>>> SELECT rqdispo.refcomp, [qtefab]*[forms]![frmdispo]![qte] AS
>>> totqtefab, [qteres]*[forms]![frmdispo]![qte] AS totqteres
>>> FROM rqdispo INNER JOIN tblcomposant ON rqdispo.refcomp =
>>> tblcomposant.refcomp
>>> GROUP BY rqdispo.refcomp, [qtefab]*[forms]![frmdispo]![qte], [qteres] *
>>> [forms]![frmdispo]![qte];
>>> Pour le message de michel la théorie de base est la suivante :
>>> des produits finis contiennent des composants, j'ai une table de
>>> nomenclature qui répertorie les composants et leur quantité de ch aque
>>> produit, pour une fabrication [qtefab] et pour une restauration
>>> [qteres]
>>> Quand je veux fabriquer le composant 231, modèle B01 par exemple je
>>> lance un form ou je choisis le modèle 231, le sous-modèle B01 et la
>>> quantité que je désire fabriquer (ou restaurer) par ex 2.
>>> Ca me lance la requete rqstkmaj qui me donne la liste des composants
>>> requis par le form et la quantité totale pour une fab ou une resto, et
>>> la requete que j'essaie de faire maintenant doit me modifier la table
>>> [tblcomposant] et mettant a jour le stock dispo donc [stk]=[stk]-
>>> [totqtefab] si je fais une fab...
>>> Merci de votre aide à tous
>> Ok pour les sorties mais tu ne mentionne pas comment tu réalise tes entrées ?

>> Car ensuite pas besoin de stocker la valeur du stock restant celui-ci
>>   va se calculer à la demande via l'opération suivante :
>> stock restant = somme des entrées - somme des sorties


Avatar
Gloops
Bonjour,

Txl a écrit, le 11/04/2009 11:56 :
UPDATE tblcomposant INNER JOIN rqmajstk ON tblcomposant.refcomp =
rqmajstk.refcomp SET tblcomposant.stk = [stk]-[totqtefab];

Quand je veux executer la requete j'ai une boite d'erreur comme quoi
"L'opération doit utiliser une requete qui peut etre mise à jour" e t
je me retrouve bloqué




Oui, c'est bien possible qu'on tique pour faire une mise à jour sur un
INNER JOIN.

ça risque de marcher bien mieux en isolant la clef du composant, disons
que ce soit refComp et qu'elle soit une chaîne de caractères, et en
faisant la mise à jour plutôt sur la table :

"UPDATE tblComposant " & _
"SET stk = " & nouvellevaleur & _
" WHERE refComp = '" & refPourLeComposantAMettreAJour & "'"

Alors après, que la refPourLeComposantAMettreAJour soit lue dans une
autre requête, c'est une autre question.

J'aurais tendance à ouvrir un jeu d'enregistrements sur l'autre requê te
pour lire chaque clef à mettre à jour, ça pourrait être intéres sant que
quelqu'un nous écrive un jeu de requêtes pour faire l'ensemble sans
passer par un jeu d'enregistrements, comme ça, pour faire joli.
Avatar
Txl
Euu, je suis pas sur de tout comprendre :)

la requete qui me donne la liste de choses à mettre a jour dans la
table comprend une ref unique à 4 chiffres (genre 1454), et 1 quantité
(par exemple 4), je veux aller dans la table tblcomposant et faire
pour la ref 1454 stk=stk+4

Comme la cle du composant est la ref 1454 je pensais que ca serait
bien vérouillé, non ?

Sinon est-ce que tu peux m'expliquer en francais (et pas en
access :) ) ce qu'il faut que je fasse ?

Merci


Bonjour,

Txl a écrit, le 11/04/2009 11:56 :

> UPDATE tblcomposant INNER JOIN rqmajstk ON tblcomposant.refcomp =
> rqmajstk.refcomp SET tblcomposant.stk = [stk]-[totqtefab];

> Quand je veux executer la requete j'ai une boite d'erreur comme quoi
> "L'opération doit utiliser une requete qui peut etre mise à jour" e t
> je me retrouve bloqué

Oui, c'est bien possible qu'on tique pour faire une mise à jour sur un
INNER JOIN.

ça risque de marcher bien mieux en isolant la clef du composant, disons
que ce soit refComp et qu'elle soit une chaîne de caractères, et en
faisant la mise à jour plutôt sur la table :

"UPDATE tblComposant " & _
"SET stk = " & nouvellevaleur & _
" WHERE refComp = '" & refPourLeComposantAMettreAJour & "'"

Alors après, que la refPourLeComposantAMettreAJour soit lue dans une
autre requête, c'est une autre question.

J'aurais tendance à ouvrir un jeu d'enregistrements sur l'autre requê te
pour lire chaque clef à mettre à jour, ça pourrait être intéres sant que
quelqu'un nous écrive un jeu de requêtes pour faire l'ensemble sans
passer par un jeu d'enregistrements, comme ça, pour faire joli.


Avatar
Michel__D
Bonjour,

Txl a écrit :
Bonjour,

EN fait mon stock est en théorie juste, j'ai fait un inventaire, quand
je commande des pièces à un fournisseur c'est stocké dans la base dans
une table de commande fournisseur et quand la commande arrive c'est
validé "tu as commandé 12 rondelles, le colis ets arrivé il y a 12
rondelles, je rajoute 12 rondelles au stock"

Par contre quand un client me commande un produit "ABC" je liste les
rondelles, boulons et écrous qu'il me faut pour faire le ABC (j'ai une
table de nomenclature) et je sors ca du stock, donc ma requete va
regarder ce qu'il me faut pour faire un ABC et multiplier les nombre
de rondellles par la quantité de ABC que je veux, pareil pour les
écrous et les boulons, donc je me retrouve aec un résultat de requete
qui contient la ref de la rondelle, la quantité TOTALE que je vais
utiliser dans cette commande et je vire ca du stock, sauf que je
n'arrive pas à le virer du stock...

La ou ca se complique c'est que je peux FABRIQUER des ABC mais je peux
aussi RESTAURER des ABC, si tu en as acheté un il y a 5 ans et que je
le répare je vais changer certaines pièces, mais pas d'autres, donc
j'ai une nomenclature de fabrication (fab) et une nomenclature de
restauration (res), ensuite j'enlève de mon stock totqteres si je fais
une resto ou totqtefab si je fais une fabrication.

Pour le PS j'essaie de t'expliquer.

Un form frmdispo me permet de choisir le modèle (par ex ABC) puis la
quantité que je veux faire puis un bouton bascule fabrication ou
restauration
donc le champ totqteres est le produit de la quantité à fabriqur ou a
restaurer multiplié par la qte qu'on a défini dans le form...

J'espère que c'est clair et je suis sur que j'aurais pu le faire
différement mais je suis TRES MAUVAIS aveac les dlookup donc je ne m'y
aventure pas trop, et j'ai tjs ce pb de requete qui me dit qu'elle
doit etre modifiable

Merci d'avance




Pourtant je pense qu'avec un dlookup ce serait possible, mais bon il
faudrait décortiquer la structure de tes tables/requêtes pour pouvoir
t'aider efficacement et tout cela demande du temps et en ce moment
j'en ai pas trop.

PS:Ok pour la différence fabrication/restauration.


Bonjour,

Txl a écrit :

Bonjour,
Les entrées sont calculées bien avant, j'ai un form de réception de
commande fournisseur qui valide la commande fournisseur passée
auparavant genre
12 rondelles commandées et le form de réception de commande m'affiche
par défaut 12 rondelles recus, l'utilisateur vérifie qu'il y en a bien
12 et valide la réception de commande, ca lance une requete qui met à
jour le stock.


Ben pourquoi tu mets à jour le stock puisque tu as tous les éléments
pour calculer ton stock à la demande (requête de regroupement sur la
référence du produit avec opération de sommation).

Mais j'ai toujours ce message d'erreur sur la requete de sortie du
stock sur une demande de fabrication....


Bien que je ne sois pas d'accord avec ta façon de procéder, pourquoi
tu utilise une requète pour calculer [totqtefab] utilise plutot une
fonction de domaine (DLookup) pour récupérer le nombre nécessaire de
composant que tu multiplieras par le nombre de produit à produire.

PS:Tu peux expliquer la finalité de ce champ calculé :
[qteres]*[forms]![frmdispo]![qte] AS totqteres





Merci
Bonjour,
Txl a écrit :
Bonjour à tous,
Donc suivant les conseils de fabien j'ai fait une requete de MAJ qui
prend d'un coté la table composants tblcomposant qui contient les
composants de produits et leur stock et d'un autre coté la requete
rqmajstk qui comporte la liste des composants nécessaires pour
construire un produit (ou 2 ou 3 puisqu'il y a un champ quantité)
UPDATE tblcomposant INNER JOIN rqmajstk ON tblcomposant.refcomp >>>>> rqmajstk.refcomp SET tblcomposant.stk = [stk]-[totqtefab];
Quand je veux executer la requete j'ai une boite d'erreur comme quoi
"L'opération doit utiliser une requete qui peut etre mise à jour" et
je me retrouve bloqué
[stk] est la valeur du stock de composant et [totqtefab] est la
quantité totale de ce composant que je dois sortir du stock (par
exemple pour faire 1 produit il me faut 3 rondelles donc pour faire 3
produits il me fauabrit enlver 9 rondelles du stock) et qui est
calculée par la requete rqmajstk en partant d'un form qui me donne le
modèle de produit que je dois fabriquer et la quantité, pour référence
je metes le code SQL de la requete rqmajstk
SELECT rqdispo.refcomp, [qtefab]*[forms]![frmdispo]![qte] AS
totqtefab, [qteres]*[forms]![frmdispo]![qte] AS totqteres
FROM rqdispo INNER JOIN tblcomposant ON rqdispo.refcomp >>>>> tblcomposant.refcomp
GROUP BY rqdispo.refcomp, [qtefab]*[forms]![frmdispo]![qte], [qteres]*
[forms]![frmdispo]![qte];
Pour le message de michel la théorie de base est la suivante :
des produits finis contiennent des composants, j'ai une table de
nomenclature qui répertorie les composants et leur quantité de chaque
produit, pour une fabrication [qtefab] et pour une restauration
[qteres]
Quand je veux fabriquer le composant 231, modèle B01 par exemple je
lance un form ou je choisis le modèle 231, le sous-modèle B01 et la
quantité que je désire fabriquer (ou restaurer) par ex 2.
Ca me lance la requete rqstkmaj qui me donne la liste des composants
requis par le form et la quantité totale pour une fab ou une resto, et
la requete que j'essaie de faire maintenant doit me modifier la table
[tblcomposant] et mettant a jour le stock dispo donc [stk]=[stk]-
[totqtefab] si je fais une fab...
Merci de votre aide à tous


Ok pour les sorties mais tu ne mentionne pas comment tu réalise tes entrées ?
Car ensuite pas besoin de stocker la valeur du stock restant celui-ci
va se calculer à la demande via l'opération suivante :
stock restant = somme des entrées - somme des sorties









Avatar
Txl
Oui, ca serait surement faisable autrement mais j'ai déja assez de mal
avec les requetes pour me lancer dans les dlookup at compagnie :)

Merci pour les tuyaux et j'espère que quelqu'un pourra m'aider à
finaliser cette requete car la base est bloquée en ce moment.

J'attends les prochaines idées à tester avec impatience :)


Bonjour,

Txl a écrit :





> Bonjour,

> EN fait mon stock est en théorie juste, j'ai fait un inventaire, quan d
> je commande des pièces à un fournisseur c'est stocké dans la base dans
> une table de commande fournisseur et quand la commande arrive c'est
> validé "tu as commandé 12 rondelles, le colis ets arrivé il y a 1 2
> rondelles, je rajoute 12 rondelles au stock"

> Par contre quand un client me commande un produit "ABC" je liste les
> rondelles, boulons et écrous qu'il me faut pour faire le ABC (j'ai un e
> table de nomenclature) et je sors ca du stock, donc ma requete va
> regarder ce qu'il me faut pour faire un ABC et multiplier les nombre
> de rondellles par la quantité de ABC que je veux, pareil pour les
> écrous et les boulons, donc je me retrouve aec un résultat de reque te
> qui contient la ref de la rondelle, la quantité TOTALE que je vais
> utiliser dans cette commande et je vire ca du stock, sauf que je
> n'arrive pas à le virer du stock...

> La ou ca se complique c'est que je peux FABRIQUER des ABC mais je peux
> aussi RESTAURER des ABC, si tu en as acheté un il y a 5 ans et que je
> le répare je vais changer certaines pièces, mais pas d'autres, donc
> j'ai une nomenclature de fabrication (fab) et une nomenclature de
> restauration (res), ensuite j'enlève de mon stock totqteres si je fai s
> une resto ou totqtefab si je fais une fabrication.

> Pour le PS j'essaie de t'expliquer.

> Un form frmdispo me permet de choisir le modèle (par ex ABC) puis la
> quantité que je veux faire puis un bouton bascule fabrication ou
> restauration
> donc le champ totqteres est le produit de la quantité à fabriqur ou a
> restaurer multiplié par la qte qu'on a défini dans le form...

> J'espère que c'est clair et je suis sur que j'aurais pu le faire
> différement mais je suis TRES MAUVAIS aveac les dlookup donc je ne m' y
> aventure pas trop, et j'ai tjs ce pb de requete qui me dit qu'elle
> doit etre modifiable

> Merci d'avance

Pourtant je pense qu'avec un dlookup ce serait possible, mais bon il
  faudrait décortiquer la structure de tes tables/requêtes pour pou voir
  t'aider efficacement et tout cela demande du temps et en ce moment
  j'en ai pas trop.

PS:Ok pour la différence fabrication/restauration.

>> Bonjour,

>> Txl a écrit :

>>> Bonjour,
>>> Les entrées sont calculées bien avant, j'ai un form de réceptio n de
>>> commande fournisseur qui valide la commande fournisseur passée
>>> auparavant genre
>>> 12 rondelles commandées et le form de réception de commande m'aff iche
>>> par défaut 12 rondelles recus, l'utilisateur vérifie qu'il y en a bien
>>> 12 et valide la réception de commande, ca lance une requete qui met à
>>> jour le stock.
>> Ben pourquoi tu mets à jour le stock puisque tu as tous les élém ents
>>   pour calculer ton stock à la demande (requête de regroupement sur la
>>   référence du produit avec opération de sommation).

>>> Mais j'ai toujours ce message d'erreur sur la requete de sortie du
>>> stock sur une demande de fabrication....
>> Bien que je ne sois pas d'accord avec ta façon de procéder, pourqu oi
>>   tu utilise une requète pour calculer [totqtefab] utilise plutot une
>>   fonction de domaine (DLookup) pour récupérer le nombre néces saire de
>>   composant que tu multiplieras par le nombre de produit à produir e.

>> PS:Tu peux expliquer la finalité de ce champ calculé  :
>> [qteres]*[forms]![frmdispo]![qte] AS totqteres

>>> Merci
>>>> Bonjour,
>>>> Txl a écrit :
>>>>> Bonjour à tous,
>>>>> Donc suivant les conseils de fabien j'ai fait une requete de MAJ qu i
>>>>> prend d'un coté la table composants tblcomposant qui contient les
>>>>> composants de produits et leur stock et d'un autre coté la requet e
>>>>> rqmajstk qui comporte la liste des composants nécessaires pour
>>>>> construire un produit (ou 2 ou 3 puisqu'il y a un champ quantité)
>>>>> UPDATE tblcomposant INNER JOIN rqmajstk ON tblcomposant.refcomp =
>>>>> rqmajstk.refcomp SET tblcomposant.stk = [stk]-[totqtefab];
>>>>> Quand je veux executer la requete j'ai une boite d'erreur comme quo i
>>>>> "L'opération doit utiliser une requete qui peut etre mise à jou r" et
>>>>> je me retrouve bloqué
>>>>> [stk] est la valeur du stock de composant et [totqtefab] est la
>>>>> quantité totale de ce composant que je dois sortir du stock (par
>>>>> exemple pour faire 1 produit il me faut 3 rondelles donc pour faire 3
>>>>> produits il me fauabrit enlver 9 rondelles du stock) et qui est
>>>>> calculée par la requete rqmajstk en partant d'un form qui me donn e le
>>>>> modèle de produit que je dois fabriquer et la quantité, pour r éférence
>>>>> je metes le code SQL de la requete rqmajstk
>>>>> SELECT rqdispo.refcomp, [qtefab]*[forms]![frmdispo]![qte] AS
>>>>> totqtefab, [qteres]*[forms]![frmdispo]![qte] AS totqteres
>>>>> FROM rqdispo INNER JOIN tblcomposant ON rqdispo.refcomp =
>>>>> tblcomposant.refcomp
>>>>> GROUP BY rqdispo.refcomp, [qtefab]*[forms]![frmdispo]![qte], [qtere s]*
>>>>> [forms]![frmdispo]![qte];
>>>>> Pour le message de michel la théorie de base est la suivante :
>>>>> des produits finis contiennent des composants, j'ai une table de
>>>>> nomenclature qui répertorie les composants et leur quantité de chaque
>>>>> produit, pour une fabrication [qtefab] et pour une restauration
>>>>> [qteres]
>>>>> Quand je veux fabriquer le composant 231, modèle B01 par exemple je
>>>>> lance un form ou je choisis le modèle 231, le sous-modèle B01 e t la
>>>>> quantité que je désire fabriquer (ou restaurer) par ex 2.
>>>>> Ca me lance la requete rqstkmaj qui me donne la liste des composant s
>>>>> requis par le form et la quantité totale pour une fab ou une rest o, et
>>>>> la requete que j'essaie de faire maintenant doit me modifier la tab le
>>>>> [tblcomposant] et mettant a jour le stock dispo donc [stk]=[stk]-
>>>>> [totqtefab] si je fais une fab...
>>>>> Merci de votre aide à tous
>>>> Ok pour les sorties mais tu ne mentionne pas comment tu réalise te s entrées ?
>>>> Car ensuite pas besoin de stocker la valeur du stock restant celui-c i
>>>>   va se calculer à la demande via l'opération suivante :
>>>> stock restant = somme des entrées - somme des sorties


Avatar
Gloops
Txl a écrit, le 14/04/2009 14:48 :
Euu, je suis pas sur de tout comprendre :)

la requete qui me donne la liste de choses à mettre a jour dans la
table comprend une ref unique à 4 chiffres (genre 1454), et 1 quantit é
(par exemple 4), je veux aller dans la table tblcomposant et faire
pour la ref 1454 stk=stk+4



UPDATE tblComposant SET stk = stk + 4 WHERE ref = 1454


Comme la cle du composant est la ref 1454 je pensais que ca serait
bien vérouillé, non ?

Sinon est-ce que tu peux m'expliquer en francais (et pas en
access :) ) ce qu'il faut que je fasse ?




Créer une nouvelle requête, l'afficher en mode SQL (il y a une liste
déroulante en forme de bouton, pour ça, à gauche de la barre d'outi ls),
coller le code ci-dessus, cliquer sur Exécuter (c'est un point
d'exclamation, je crois ?

Et ensuite aller vérifier le résultat.
Avatar
Txl
Oui, sauf que pour faire 1 produit j'ai 73 references...

refcomp totqtefab totqteres
1417 8 0
1419 40 0
1420 40 0
1447 4 4

etc...

Donc faire un code qui me met à jour toutes les refs dans la table
tblcomposant ca va etre un cauchemar, d'ou l'idée de passer par une
requete mise à jour, mais je suis bloqué.

J'ai une première requete "rqstkmaj" qui calcule les quantités et les
ref à modifier, ca marche très bien, ensuite une 2° requete
"rqstkupdate" reprend les résultats de la 1° et les met à jour avec m a
table, et ca marche pas :(

Le code de la requete DE SELECTION "rqmajstk" est :

SELECT rqdispo.refcomp, [qtefab]*forms!frmdispo!qte AS totqtefab,
[qteres]*forms!frmdispo!qte AS totqteres
FROM rqdispo INNER JOIN tblcomposant ON rqdispo.refcomp =
tblcomposant.refcomp
GROUP BY rqdispo.refcomp, [qtefab]*forms!frmdispo!qte, [qteres]*forms!
frmdispo!qte;

Et ca marche nickel

Le code de la requete de MISE A JOUR "rqstkupdate" est :

UPDATE tblcomposant INNER JOIN rqmajstk ON
tblcomposant.refcomp=rqmajstk.refcomp SET tblcomposant.stk = [stk]-
[totqtefab];

ET la j'ai cette erreur

"L'opération doit utiliser une requete qui peut etre mise à jour"

Merci d'avance


Txl a écrit, le 14/04/2009 14:48 :

> Euu, je suis pas sur de tout comprendre :)

> la requete qui me donne la liste de choses à mettre a jour dans la
> table comprend une ref unique à 4 chiffres (genre 1454), et 1 quantit é
> (par exemple 4), je veux aller dans la table tblcomposant et faire
> pour la ref 1454 stk=stk+4

UPDATE tblComposant SET stk = stk + 4 WHERE ref = 1454



> Comme la cle du composant est la ref 1454 je pensais que ca serait
> bien vérouillé, non ?

> Sinon est-ce que tu peux m'expliquer en francais (et pas en
> access :)  ) ce qu'il faut que je fasse ?

Créer une nouvelle requête, l'afficher en mode SQL (il y a une liste
déroulante en forme de bouton, pour ça, à gauche de la barre d'outi ls),
coller le code ci-dessus, cliquer sur Exécuter (c'est un point
d'exclamation, je crois ?

Et ensuite aller vérifier le résultat.


Avatar
Gloops
Txl a écrit, le 16/04/2009 19:11 :
Oui, sauf que pour faire 1 produit j'ai 73 references...



"L'opération doit utiliser une requete qui peut etre mise à jour"



C'est bien pour ça que je proposais de passer par l'ouverture d'un jeu
d'enregistrements (il n'y a pas l'air d'y avoir bousculade au portillon
pour proposer de faire tout le travail avec une requête).

Donc, mettons qu'on a mis dans une variable texte strSQL le code SQL de
la requête de sélection (celle avec les jointures, qui comporte les
champs stk et ref).

Ensuite on va la parcourir enregistrement par enregistrement et réalise r
les mises à jour de stock correspondantes.

' ========= En haut de la procédure
Dim Rs As Recordset
Dim strMaj As String 'code SQL de mise à jour

' ========= Après avoir défini strSQL
Set Rs = CurrentDb().OpenRecordset(strSQL)
'Rs est un jeu d'enregistrements ouvert sur la requête de sélection

While Not Rs.EOF
Debug.Print "Traitement de la référence" & ref & " : ancien stock "
& stk & ", nouveau stock " & stk + 4
'ce qui permet de voir dans la fenêtre d'exécution ce qui aura é té fait
'et de vérifier dans la table que le nouveau stock correspondra bie n
'à ce à quoi on s'attendra

strMaj = "UPDATE tblComposant"
strMaj = strMaj + " SET stk = " & (stk + 4)
strMaj = strMaj + " WHERE ref = " & ref
'Attention, les espaces sont importants
'devant SET et WHERE

CurrentDb().Execute(strMaj)
'au besoin mettre SetWarnings à false
'pour ne pas avoir de demande de confirmation

Rs.MoveNext
Wend
Rs.Close
Set Rs = Nothing

Tout ça dans le code d'un bouton par exemple ...
Il reste à corriger la syntaxe, je n'ai pas ce qu'il faut sous la main.=
Avatar
Gloops
Gloops a écrit, le 17/04/2009 12:34 :
' ========= En haut de la procédure
Dim Rs As Recordset
Dim strMaj As String 'code SQL de mise à jour

' ========= Après avoir défini strSQL
Set Rs = CurrentDb().OpenRecordset(strSQL)
'Rs est un jeu d'enregistrements ouvert sur la requête de sélection




En supposant qu'on ait déjà créé une requête de sélection dan s la base,
et qu'on l'ait appelée qrySelection (son code SQL est donc strSQL), le
jeu d'enregistrements peut aussi se définir comme suit, on n'aura donc
plus besoin de strSQL dans la procédure :

Dim qrySel As QueryDef


Set qrySel = CurrentDb().QueryDefs("qrySelection")
Set Rs = qrySel.OpenRecordset()
Avatar
Gloops
Gloops a écrit, le 17/04/2009 12:34 :

sauf que j'en ai largué en route ...

Bien sûr, c'était pour voir si tout le monde suit :)
mais finalement c'était quand même un peu gonflé de ma part.

Set Rs = CurrentDb().OpenRecordset(strSQL)
'Rs est un jeu d'enregistrements ouvert sur la requête de sélection



Bon, jusque là OK, il y a d'ailleurs une variante comme je disais.


While Not Rs.EOF



toujours OK


Debug.Print "Traitement de la référence" & ref & " : ancien stoc k " &
stk & ", nouveau stock " & stk + 4



devient :

Debug.Print "Traitement de la référence " & Rs!ref & _
" : ancien stock " & Rs!stk & ", nouveau stock " & Rs!stk + 4

'ce qui permet de voir dans la fenêtre d'exécution ce qui aura é té fait
'et de vérifier dans la table que le nouveau stock correspondra bi en
'à ce à quoi on s'attendra

strMaj = "UPDATE tblComposant"
strMaj = strMaj + " SET stk = " & (stk + 4)
strMaj = strMaj + " WHERE ref = " & ref
'Attention, les espaces sont importants
'devant SET et WHERE




devient

strMaj = "UPDATE tblComposant"
strMaj = strMaj + " SET stk = " & (Rs!stk + 4)
strMaj = strMaj + " WHERE ref = " & Rs!ref


CurrentDb().Execute(strMaj)
Rs.MoveNext
Wend
Rs.Close
Set Rs = Nothing




Là je pense que ça devrait gazer (si on est bien toujours d'accord qu e
la clef Ref est un entier).
1 2 3