[Résolu] Requete SQL UPDATE avec 2 tables

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
schtroumpfi
Membre lOOyal
Membre lOOyal
Messages : 30
Inscription : 18 juin 2008 08:24

[Résolu] Requete SQL UPDATE avec 2 tables

Message par schtroumpfi »

Bonjour,

Dans le cadre de mon travail, je désire mettre en place une gestion de stock sous base. Le problème est que je désire mettre à jour les quantités de produit en stock en fonction d'une table mouvement (Entrée, sortie). Le problème se situe au niveau de la requete sql update qui met à jour mes données comme je le désire si le numéro de référence entre les deux tables existes et m'efface les valeurs ou ce n'est pas le cas.
Le plus explicite est de vous présenter ma base test ainsi que ma requete.
Table1: Ref du produit et unité en stock (le champ à mettre à jour)
Table2: la Ref du produit (lien entre les tables) les champs Entrée et Sortie contiendront les quantité correspondantes
le nouveau stock vaut donc Unité_stock=Unité_stock + (Entrée-Sortie). Comme le calcul ne fonctionnait pas directement dans l'update j'ai du passer par deux vue. Le nouveau stock se trouve dans Vue2.

Voila la requete SQL

Code : Tout sélectionner

UPDATE "Table1"
SET "Unité_stock"= (SELECT "stockMAJ" FROM "Vue2"
WHERE "Table1"."Ref"="Vue2"."Réf")
Et voici la base:
stock.odb
Je vous remercie d'avance de votre aide et m'excuse aussi si les explications ne sont pas claires mais c'est la première fois que je viens sur le forum.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice.org 3.1.1
Windows XP SP2
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Requete SQL UPDATE avec 2 tables

Message par jeanmimi »

Bonjour et bienvenue dans ce forum,
La mise à jour du stock peut être effectuée dans une requête.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
schtroumpfi
Membre lOOyal
Membre lOOyal
Messages : 30
Inscription : 18 juin 2008 08:24

Re: Requete SQL UPDATE avec 2 tables

Message par schtroumpfi »

Bonjour,

Merci bien pour la prompte réponse,
Toutefois ce n'est pas tout à fait ce que je voulais.
Le petit plus ce serait de récupérer la valeur de cette requête qui devra remplacer la valeur unité_stock de la Table1 (qui sera prochainement ma table article ou produit). C'est pour cela que j'avais pensé à une update mais seulement pour les articles qui ont subi un mouvement (c-a-d dont le stock a été modifié).
Le but ultime est de mettre cela dans une macro (déjà écrite et qui fonctionne seul la requete sql pose problème) qui s'active à chaque fois que je rajoute un mouvement via le formulaire.
Merci d'avance pour les réponses qui suivront
OpenOffice.org 3.1.1
Windows XP SP2
YVES14
Membre hOOnoraire
Membre hOOnoraire
Messages : 110
Inscription : 08 janv. 2008 20:50
Localisation : lion sur mer CalvadOOos

Re: Requete SQL UPDATE avec 2 tables

Message par YVES14 »

Bonsoir schtroumpfi,

si j'ai bien compris ta démarche, tu voudrais ne mettre à jour que l'article que vient de mouvementer le formulaire?

dans ce cas il faut une requete en update sur l'article concerné, en fouillant sur le forum (section macro), je sais que cela existe ( il me semble qu'on passe en paramètre le critère de sélection, Ref dans ton cas).

Concernant une tenue de stock, en règle générale il vaut mieux avoir au niveau de l'article les champs suivants: stock début, cumul entrées, cumul sorties, cumul ajustement, stock dynamique, ce qui donne un contrôle visuel et permet un contrôle du travers, on peut facilement recalculer les cumuls via le fichier des mouvements et donc réconstituer le dynamique. Périodiquement on vide le fichier mouvements, remet à zéro les cumuls et le stock initial est mis à la valeur du dynamique. Tout cela semble un peu lourd, mais la sécurité à un prix!

Bon courage
Windows XP SP3 OOo3.0.1 et SRB 1.0.6
schtroumpfi
Membre lOOyal
Membre lOOyal
Messages : 30
Inscription : 18 juin 2008 08:24

Re: Requete SQL UPDATE avec 2 tables

Message par schtroumpfi »

Bonjour,
Merci pour la réponse.
C'est exactement la démarche que j'ai suivie.
Je joint ma base de test qui a la structure de la base finale, avec quelques enregistrement en exemple.
Gestion_stock_test.odb
Et voilà ma requete update:

Code : Tout sélectionner

UPDATE "Articles"
SET "Unité_stock"= (SELECT "stock" FROM "Stock_dynamique"
where "Articles"."Code_Art"="Stock_dynamique"."Code_Art" AND "Articles"."Emplacement_Art"="Stock_dynamique"."Emplacement_Art" )
Le problème est qu'elle me met bien à jour les enregistrement que je désire, mais m'efface les valeurs de stock dont le code de l'article ne correspond pas à la condition au lieu de garder la valeur initiale. Je pense que c'est la formulation de la condition qui pose problème.

Merci d'avance et bonne soirée et bon week-end.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice.org 3.1.1
Windows XP SP2
schtroumpfi
Membre lOOyal
Membre lOOyal
Messages : 30
Inscription : 18 juin 2008 08:24

Re: Requete SQL UPDATE avec 2 tables

Message par schtroumpfi »

Bonjour,

Voilà j'ai résolu mon problème de critère au sein de ma requête Update.
Je met le code SQL je pense que ça peut être intéressant pour d'autre personne qui veulent faire de la gestion de stock.

Code : Tout sélectionner

UPDATE "Articles"
SET "Unité_stock"= (SELECT "Stock" FROM "Stock_dynamique"
where "Articles"."Code_Art"="Stock_dynamique"."Code_Art"
AND "Articles"."Emplacement_Art"="Stock_dynamique"."Emplacement_Art")
WHERE "Articles"."Code_Art" IN (SELECT "Code_Art" FROM "Stock_dynamique")
AND "Articles"."Emplacement_Art" IN (SELECT "Emplacement_Art" FROM "Stock_dynamique")
C'étail le where ... in l'astuce

Merci pour vos conseils.
L'étape suivante est de la mettre dans ma macro (normalement pas de problème vu que la première fonctionnait).
A bientôt et bonne journée
OpenOffice.org 3.1.1
Windows XP SP2
Sanseau
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 280
Inscription : 13 juin 2008 10:14

Re: [Résolu] Requete SQL UPDATE avec 2 tables

Message par Sanseau »

Bonsoir

j'ai télécharger votre base mais je ne vois nul par la requete SQL UPDATE

cela m'intéresserait de pouvoir tester car je cherches une possibilité de faire des calculs progressifs avec base
Donc si vous avez le temps de reposter la base avec la requête qui fonctionne ça m'aiderait dans ma démarche

D'avance Merci
@+
OpenOffice 4.1.3 ORB 1.2.1
Windows 10