Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

Aide pour créer requêtes ACCESS

jabest, le jeudi 2 novembre 2006 à 13:30:58
Bonjour à tous ,

J'ai créé une BD Access avec 2 tables :

TABLE1 : ENTREE
N° DATE REF-E PRODUIT QTE-E
TABLE2 : SORTIE
N° DATE REF-S PRODUIT QTE-S

Ces 2 table sont liées par une relation 1 ENTREE....+sieurs SORTIE

Je souhaiterais par une requête obtenir pour chaque produits les soldes de stock à la date du jour :

DATE PRODUIT STOCK
ce jour A = somme des QTE-E- somme des QTE-S
B
C

et par une autre requête obtenir la récap des derniers mouvements entrées ou sortie pour chaque produits :
DATE PRODUIT REF-E REF-S QTE
y A x 10
s B e 5
s C h 20

Merci d'avance pour votre aide pour info je suis pas à mes aises en SQL, VBA et manipulation demacros.
Répondre à jabest  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Jacques, le vendredi 3 novembre 2006 à 13:58:47
Bonjour,

Voici de quoi faire avancer, je crois, le schmilblick en SQL :

Il me semble que cela correspond à votre besoin (en l'adaptant à votre contexte). Attention, j'ai relu soigneusement, mais .....

SELECT ENTREES.[Code produit], ENTREES.[Nom du Matériel], SORTIES.[Nb sorties] , ENTREES.[Nb entrees] , [entrees].[nb entrees]-[sorties].[nb sorties] AS situation, ENTREES.DateTransaction
FROM ENTREES INNER JOIN SORTIES ON ENTREES.[code produit] = SORTIES.[code produit]
GROUP BY ENTREES.[code produit], ENTREES.[Nom du produit], SORTIES.[nb sorties], ENTREES.[nb entrees], [entrees].[nb entrees]-[sorties].[nb sorties], ENTREES.DateTransaction
HAVING (((ENTREES.DateTransaction)=Date()));

Cordialement
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Répondre à Jacques

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jabest, le vendredi 3 novembre 2006 à 20:15:47
Merci Jacques , pouvez-vous apporter plus d'explication à un pur néophyte je suis perdu dans voitre procédure.
Je reprends ci dessous mes tables en espérant être plus clair :

- ENTREE (N°,DATE,REF-E,PRODUIT,QTE-E)

- SORTIE (N°,DATE,REF-S,PRODUIT,QTE-S)

Mon but c'est d'avoir une requête qui me donne pour chaque PRODUIT le STOCK=QTE-E - QTE-S
Répondre à jabest

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Jacques, le samedi 4 novembre 2006 à 10:43:43
Bonjour,
A propos : Dans les noms le '-' est proscrit. Utiliser '_'.
Nota : voilà la requête à copier dans : Requête/nouveau/mode création/(fermer ajouter table)/ activer affichage/SQL mode SQL

SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S] AS STOCK, ENTREE.Date
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S], ENTREE.Date
HAVING (((ENTREE.Date)=Date()));

Attention : Seuls les enregistrements dont la date est 04/11/2006 seront listés
Cordialement
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Répondre à Jacques

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jabest, le lundi 6 novembre 2006 à 10:36:42
Une pure merveille !!!!! Merci Jacques.

Cdlmt
Répondre à jabest

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Jacques, le lundi 6 novembre 2006 à 14:09:46
Bonjour,
Un dernier conseil : dans la table Entree, renommer le champ 'Date' en 'Date_Entree' car l'ambiguïté avec la "Date" système peut faire planter les requêtes. En fait Date est un mot dit 'réservé". Donc à proscrire systématiquement.

Pour conclure, voici une requête qui vous sera sans doute utile. Elle permet de lister les transactions d'une semaine en saisissant son N°. Nota : l'année (2006) est en dur dans la syntaxe. Il fauda peut-être l'adapter, au cas par cas, à votre besoin.

SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S] AS STOCK, DatePart("ww",[Date_entree]) AS Date_controle, ENTREE.Date_entree
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S], DatePart("ww",[Date_entree]), ENTREE.Date_entree
HAVING (((DatePart("ww",[Date_entree])) Like [ Semaine ?]) AND ((DatePart("yyyy",[Date_entree]))=2006))
ORDER BY DatePart("ww",[Date_entree]);

Bienvenue dans le monde SQL
Cordialement
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Répondre à Jacques

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jabest, le mardi 7 novembre 2006 à 16:59:13
Merci encore

Cdlmt
Répondre à jabest

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jabest, le jeudi 9 novembre 2006 à 10:22:37
Bonjour à tous ,

Jacques j'ai 2 soucis avec votre 1 ere requête:
- je souhaiterais que les STOCK = 0 ne soient pas listés
- et pouvoir lister les stocks des produits n'ayant pas été affectés par une sortie

Merci d'avance pour votre précieuse aide.
Répondre à jabest

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Jacques, le jeudi 9 novembre 2006 à 13:32:23
Bonjour,

Dans le premier cas il faut ajouter une paire de parenthèses. A l'intérieur de cette parenthèse insérer "<>0". Les stock différents de zéro sont strictement affichés.

Exemple :
SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S] AS STOCK, DatePart("ww",[Date_entree]) AS Date_controle, ENTREE.Date_entree
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S], DatePart("ww",[Date_entree]), ENTREE.Date_entree
HAVING ((([entree].[QTE_E]-[sortie].[QTE_S])<>0) AND ((ENTREE.Date_entree)=Date()))
ORDER BY DatePart("ww",[Date_entree]);

Deuxième cas : Liste des produits "non sortis". Autrement dit : ceux dont la dernière date de sortie est antérieure à la date en cours et dont le champ sortie est à zéro.

SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S] AS STOCK, SORTIE.Date_sortie, ENTREE.Date_entree
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, [entree].[QTE_E]-[sortie].[QTE_S], SORTIE.Date_sortie, ENTREE.Date_entree
HAVING (((SORTIE.QTE_S)=0) AND ((SORTIE.Date_sortie)<[entree].[Date_entree]))
ORDER BY ENTREE.PRODUIT;
Bon courage
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Répondre à Jacques

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jabest, le jeudi 9 novembre 2006 à 17:31:12
Grand merci Jacques, une toute dernière chose et j'arréte de vous ennuyer, j'ai des sorties de stock partielle avez vous une solution pour que la valeur du STOCKR décrémente en fonction des QTE_S

A vous lire.
Répondre à jabest

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Jacques, le jeudi 9 novembre 2006 à 18:23:31
Bonne soirée,

Dans un premier temps je vous propose une mine d'astuces. Il s'agit des BDD modèles fournies avec ACCESS 2000.
L'un des modèles s'intitule 'Gestion des stocks'. A l'évidence vous y trouverez des éléments utiles à votre projet ....

Pour atteindre ces modèles, procéder comme suit :

Fichier/Nouvelle base de données/onglet : Base de données/Gestion des stocks, etc .... (suivre les indications fournies)

Bonne découverte et contactez moi si nécessaire
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Répondre à Jacques

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Jacques, le vendredi 10 novembre 2006 à 13:03:46
Bonjour jabest,

A la réflexion votre question ne se pose pas. La requête fournit à chaque lancement, et de manière dynamique, la dernière situation du stock en faisant la différence entre la somme des entrées et la somme des sorties .... Ceci que la sortie saisie soit partielle ou non ...

Mais, peut-être, ai-je mal compris ?

Cordialement
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Répondre à Jacques

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jabest, le lundi 13 novembre 2006 à 10:56:52
Bonjour Jaqcues ,

Je vous rassure vous avez bien compris , par contre votre requête ne somment pas les QTE_E et les QTE_S , ce qui fait que le STOCK_R , n'est pas le solde mais la différence entre l'entrée initiale et la QTE_S.
je parviens au bon résultat en passant par 2 requêtes intermédiares de mise à jour mais je pense que l'on peut y arriver directement et de façon beaucoup moins lourde . Mon application va être utilisée au quotidien par des personnes qui ne connaissent pas du tout access j'ai donc un impératif se simplication que je n'arrive toujours pas à résoudre.

A vous lire
Répondre à jabest

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Jacques, le lundi 13 novembre 2006 à 12:26:46
Bonjour Jabest,

C'est peut-être ce qu'il vous faut :
SELECT ENTREE.N°, ENTREE.PRODUIT, Sum(ENTREE.QTE_E) AS SommeDeQTE_E, Sum(SORTIE.QTE_S) AS SommeDeQTE_S, Sum([entree].[QTE_E]-[sortie].[QTE_S]) AS STOCKR, SORTIE.Date_sortie, ENTREE.Date_entree
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.PRODUIT, SORTIE.Date_sortie, ENTREE.Date_entree
ORDER BY ENTREE.PRODUIT;

A+
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Répondre à Jacques

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jabest, le lundi 13 novembre 2006 à 18:19:07
Bonjour Jacques,

Vous êtes proche de la solution , seulement vous sommez les QTE_E ce qui fausse le calcul du STOCKR , en réalité il faudrait faire QTE_E-somme(QTE_S) j'ai tripatouillé l'expression sum de votre requête dans tous les sens mais à chaque fois il me renvoit une erreur d'agrégat ?? je suis suspendu à votre solution.

Trés cdlmt
Répondre à jabest

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Jacques, le lundi 13 novembre 2006 à 20:24:24
Bonsoir jabest,
Pour mémoire Agrégat, appelé aussi regroupement permet de masquer les informations redondantes :
Ex. Avant regroupement : Produit Qté
Bière 1
Bière 2

Après Regroupement : Produit Qté
Bière 3
_____________
Autre chose à noter : Date_DE -> Date de la dernière Entrée
Date_DS -> Date de la dernière Sortie
___________
Voici la dernière mouture
SELECT ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S, ([entree].[QTE_E]-Sum([sortie].[QTE_S])) AS STOCKR, Last(SORTIE.Date_sortie) AS Date_DS, Last(ENTREE.Date_entree) AS Date_DE
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N° = SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.PRODUIT, ENTREE.QTE_E, SORTIE.QTE_S
ORDER BY ENTREE.PRODUIT;


A+
La science ne fait que trouver ce qui existe depuis toujours.
Hubert REEVES.
Répondre à Jacques

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jabest, le mardi 14 novembre 2006 à 17:55:52
Bonsoir Jacques
à force de triturer dans tes code ci-dessous ce qui me donne le résultat escompter, j'ai simplement remplacer un sum (QTE_E) par un min.

SELECT ENTREE.N°, Sum(ENTREE.QTE_E) AS SommeDeQTE_E, Sum(SORTIE.QTE_S) AS SommeDeQTE_S, (min(ENTREE.QTE_E)-sum(SORTIE.QTE_S)) AS STOCKR, ENTREE.DATE_E
FROM ENTREE INNER JOIN SORTIE ON ENTREE.N°=SORTIE.N°
GROUP BY ENTREE.N°, ENTREE.DATE_E
ORDER BY ENTREE.N°;

Merci pour toute votre patience et votre disponibilité

A+
Répondre à jabest

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Jacques, le mardi 14 novembre 2006 à 18:56:53
Bonsoir jabest,

Vous commencez à rentrer dans le match, comme disent les footeux. C'est en forgeant, etc...

Pour conclure voici un site de référence parmi d'autres : http://access.developpez.com/


Je suis satisfait d'avoir pu contribuer utilement à votre projet
Au plaisir

La science ne fait que trouver ce qi existe depuis toujours.
Hubert REEVES
Répondre à Jacques

18


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jabest, le mercredi 15 novembre 2006 à 11:20:50
Bonjour Jacques ,

Je ne sais plus trop comment vous remercier .
Votre site de référence m'a permis encore d'améliorer ma requête en effet en remplaçant :

FROM ENTREE INNER JOIN SORTIE ON ENTREE.N°=SORTIE.N°

Par :

FROM ENTREE LEFT JOIN SORTIE ON ENTREE.N°=SORTIE.N°

La requête affiche également les entrées pour lesquels il n'exite pas encore de sortie.

C'est totale satisfaction pour moi.

Merci encore et à bientôt sur le forum ccm.
Répondre à jabest

19


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 Annesophie, le mardi 29 avril 2008 à 10:21:35
Bonjour
J ai une Base Access de 50 000 enregistrement
j avais commencer a utiliser Access pour faire des rapports
mais je suis coincee a plusieurs deux niveaux :
-Comment intervenir sur la casse?
-Comment ne pas faire apparaitre des champs vident?

Merci pour votre aide !
Répondre à Annesophie
Exécuter requête SQL en VBA (sous ACCESS) (Résolu) Bonjour, J'ai une requête SQL que j'ai créé dans ACCESS. J'aimerais pouvoir avec du code VBA appeller cette requête. Comment faire ? Merci www.commentcamarche.net/forum/affich-4949211-executer-requete-sql-en-vba-sous-access
[ACCESS - VBA -ADO] Requete predefinie (Résolu) Bonjour Je développe actuellement une appli Acces/VBA. Je souhaiterais savoir s'il existe en ADO le moyen d'exécuter une requête déjà définie dans les requetes access. L'équivalent de ce qui existe avec les querydefs de DAO : Set... www.commentcamarche.net/forum/affich-2444447-access-vba-ado-requete-predefinie
[sql - access] If et IsNumeric (Résolu) Bonjour bonjour, J'ai un petit problème sur une requête access. C'est pour faire une insertion avec un SELECT, mais ça, ça fonctionne. Le truc, c'est que j'ai un champ "libelleMouvement". Ce champ est composé d'un numéro de... www.commentcamarche.net/forum/affich-5105057-sql-access-if-et-isnumeric
[Sécurité] Les Access Control Lists (ACLs)ACL Outrepasser les droits de base d'un système Linux en utilisant les ACLs. I. PREREQUIS II. Introduction III. Définition IV. Mise en place de support pour les ACLs Vérification de la prise en charge des ACLs par le kernel Installation... www.commentcamarche.net/faq/sujet-3773-securite-les-access-control-lists-acls
Page internet/google redirigée1er cas : Détournement du fichier hosts Méthode de désinfection : 2ème cas : Infection wareout : Identification : Méthodes de désinfection : En résumé : Lorsque vous faites une recherche, ou surfez sur internet, vos pages sont... www.commentcamarche.net/faq/sujet-6063-page-internet-google-redirigee
Concaténation dans access (Résolu)Bonjour, J'aimerais savoir s'il est possible de créer un champ dans une requête access qui serait une concaténation de 6 champs, mais où seul les champs non nul serait inclus dans la concaténation. Merci www.commentcamarche.net/forum/affich-3259479-concatenation-dans-access
-- ACCESS -- Enregistrement précédent (Résolu)Bonjour, Voilà mon problème : Dans une requête Access j'ai un champ "DateVisite" issu de la table "Visites". Je peux donc avoir plusieurs "DateVisite" Je voudrais (sans programmation, câd directement avec des fonctions dans la requête) créer une... www.commentcamarche.net/forum/affich-4852465-access-enregistrement-precedent
ACCESS - Enregistrement précédent (Résolu)Bonjour, Voilà mon problème : Dans une requête Access j'ai un champ "DateVisite" issu de la table "Visites". Je peux donc avoir plusieurs "DateVisite" Je voudrais (sans programmation, câd directement avec des fonctions dans la requête) créer une... www.commentcamarche.net/forum/affich-4838911-access-enregistrement-precedent
SQL - Sous-requêtesExpression des sous-requêtes Effectuer une sous-requête consiste à effectuer une requête à l'intérieur d'une autre, ou en d'autres termes d'utiliser une requête afin d'en réaliser une autre (on entend parfois le terme de requêtes en... www.commentcamarche.net/contents/sql/sqlssreq.php3
SQL - Création de tableLe SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. La création de tables Le création de tables se fait à l'aide du couple de mots-clés CREATE... www.commentcamarche.net/contents/sql/sqlcreate.php3
Java - L'API JDBCIntroduction à JDBC La technologie JDBC (Java DataBase Connectivity) est un ensemble de classes permettant de développer des applications capables de se connecter à des serveurs de bases de données (SGBD). L'accès aux bases de données avec... www.commentcamarche.net/contents/java/javajdbc.php3