IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Formulaire avec import de données d'une table pour copier sur une autre


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Mars 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Formulaire avec import de données d'une table pour copier sur une autre
    Bonjour,

    je dispose
    • d'une table STOCKS avec les champs suivants [id_piece] (clé primaire numérique), [couleur] (liste déroulante), [type] (texte), [format] (texte), [image] (PJ), [Stock total] (numérique) et [Stock inutilisé] (numérique)
    • et d'une seconde table MODELES avec [N°] (clé numéro auto), [Modèle] (numérique), [id_piece] (numérique), [couleur] (texte), [type] (texte), [format] (texte), [besoins] (numérique) et [quantité utilisée] (numérique).

    Je désespère depuis trois jours de créer une formulaire qui me permettrait :
    1) en entrant l'id_piece, d’afficher automatiquement les autres infos (couleur, type, format, image de la table STOCKS)
    2) de remplir besoins et quantité utilisée et de pouvoir enregistrer ces infos sur la table MODELES via un bouton

    J'ai essayé Dlookup mais étant novice, il m'indique systématiquement une erreur de syntaxe, et j'avoue ne pas savoir concrètement comment faire.
    Merci d'avance pour toute l'aide que vous pourrez m'apporter.

    Edit : et je viens de me rendre compte que je ne suis pas dans le bon forum, désolé.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    Par défaut
    Bonjour.

    1) en entrant l'id_piece, d’afficher automatiquement les autres infos (couleur, type, format, image de la table STOCKS)
    En fait c'est quand même le bon forum car pour faire ce que tu demandes, il te suffit d'utiliser une requête.

    1. Tu crées une nouvelle requête (reqStockModele) et tu sélectionnes tes 2 tables.
    2. Si Access ne l'a pas fait pour toi, tu crées une jointure entre tes 2 tables sur le IdPiece.
      Pour cela tu cliques sur le champ IdPiece de MODELES et tu les fait glisser vers le IdPiece de STOCK.
    3. Après tu sélectionne les champs de STOCK que tu veux et ceux de MODELE que tu veux.
    4. Tu sauvgeardes.
    5. Tu affiches le résultat : pour chaque IdPiece tu vas voir les infos.


    Après tu crées un nouveau formulaire basé sur reqStockModele.
    Quand tu vas saisir le numéro de pièce, Access va "pécher" pour toi les infos.

    2) de remplir besoins et quantité utilisée et de pouvoir enregistrer ces infos sur la table MODELES via un bouton
    Sauf problème de performance et quelques cas spéciaux, copier des données d'une table à une autre est une mauvaise idée dans une BD Relationnelle.
    Le problème des recopies c'est qu'elles ne sont pas dynamiques (sauf si tu utilises des macros de données) et donc si les valeurs d'entrées changent, le résultat lui ne change pas :-(.

    La solution recommandée est de calculer le stock au moment où tu en as besoin en te basant sur les données de mouvement de stock.
    Donc tu additionnes toutes tes entrées et tu enlèves toutes les sorties jusqu'à la date qui t'intéresse.

    Pour ta table de stock, la structure recommandée serait :

    tblStock
    NumMouvement
    IdPiece
    Quantite
    SensMouvement (-1 = sortie, +1 = entrée)
    DateMouvement
    CodeTypeMouvement (ENTREE, SORTIE) Optionnel, permet de mieux qualifier le mouvement.

    Le stock initial est une entrée unique de la quantité voulue.

    Pour avoir le stock à une date donnée tu peux utiliser la fonction DSum(). Ici un exemple qu'on peut utiliser dans une requête

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    DSum("[Sens]*[Quantite]"; "tblStock"; "[DateMouvement]<=#"  & format(UneDateDonnee; "aaaa-mm-dd") & "# and [NumMouvement]<" & [NumMouvement])

    • Les # sont obligatoires avant et après les dates
    • UneDateDonnee est la date à laquelle tu veux ton stock.
    • Le format n'est pas obligatoire mais il évite à Access les ambiguités sur les dates du type 01/02/2017 qui peuvent être vu comme le 1er février (format JJ-MM-AAAA) ou le 2 janvier (MM-JJ-AAAA).
    • and [NumMouvement]<" & [NumMouvement] permet d'avoir un stock cohérent même si tu as plus d'un mouvement dans la même journée.


    Et aussi pour les noms internes il est recommandé de se limiter à :
    • Lettres minuscules et majuscules sans accent et sans "décorations" (pas de ç)
    • Aux chiffres
    • Au souligné (_)


    Même si Access acceptent les autres caractères, ils sont parfois source de bug particulièrement vicieux et sournois.

    Si tu as besoin de textes plus agréables pour les humains utilise un formulaire et des étiquettes. Ils sont là pour cela.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Mars 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour, et merci d'avoir pris le temps de te pencher sur mon problème.

    Nom : access.jpg
Affichages : 361
Taille : 174,6 Ko

    1. Tu crées une nouvelle requête (reqStockModele) et tu sélectionnes tes 2 tables.
    2. Si Access ne l'a pas fait pour toi, tu crées une jointure entre tes 2 tables sur le IdPiece.
      Pour cela tu cliques sur le champ IdPiece de MODELES et tu les fait glisser vers le IdPiece de STOCK.
    3. Après tu sélectionne les champs de STOCK que tu veux et ceux de MODELE que tu veux.
    4. Tu sauvgeardes.
    5. Tu affiches le résultat : pour chaque IdPiece tu vas voir les infos.


    Après tu crées un nouveau formulaire basé sur reqStockModele.
    Quand tu vas saisir le numéro de pièce, Access va "pécher" pour toi les infos.
    Il devait y avoir un problème de relation entre les tables, parce que cette fois c'est enfin bon merci. En revanche, si je cherche une id_piece via le bouton "rechercher" aucun problème, mais j'aurais préféré pour plus de facilités avoir cette barre de recherche dans l'en-tête ou pourquoi pas, taper directement dans la zone de texte Stocks.id_piece


    Sauf problème de performance et quelques cas spéciaux, copier des données d'une table à une autre est une mauvaise idée dans une BD Relationnelle.
    Le problème des recopies c'est qu'elles ne sont pas dynamiques (sauf si tu utilises des macros de données) et donc si les valeurs d'entrées changent, le résultat lui ne change pas :-(.

    La solution recommandée est de calculer le stock au moment où tu en as besoin en te basant sur les données de mouvement de stock.
    Donc tu additionnes toutes tes entrées et tu enlèves toutes les sorties jusqu'à la date qui t'intéresse.
    Si je comprends bien il faut éviter les redondances pour ne pas avoir de doublons, c'est noté merci

    Pour ta table de stock, la structure recommandée serait :

    tblStock
    NumMouvement
    IdPiece
    Quantite
    SensMouvement (-1 = sortie, +1 = entrée)
    DateMouvement
    CodeTypeMouvement (ENTREE, SORTIE) Optionnel, permet de mieux qualifier le mouvement.

    Le stock initial est une entrée unique de la quantité voulue.

    Pour avoir le stock à une date donnée tu peux utiliser la fonction DSum(). Ici un exemple qu'on peut utiliser dans une requête

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    DSum("[Sens]*[Quantite]"; "tblStock"; "[DateMouvement]<=#"  & format(UneDateDonnee; "aaaa-mm-dd") & "# and [NumMouvement]<" & [NumMouvement])

    • Les # sont obligatoires avant et après les dates
    • UneDateDonnee est la date à laquelle tu veux ton stock.
    • Le format n'est pas obligatoire mais il évite à Access les ambiguités sur les dates du type 01/02/2017 qui peuvent être vu comme le 1er février (format JJ-MM-AAAA) ou le 2 janvier (MM-JJ-AAAA).
    • and [NumMouvement]<" & [NumMouvement] permet d'avoir un stock cohérent même si tu as plus d'un mouvement dans la même journée.


    Et aussi pour les noms internes il est recommandé de se limiter à :
    • Lettres minuscules et majuscules sans accent et sans "décorations" (pas de ç)
    • Aux chiffres
    • Au souligné (_)


    Même si Access acceptent les autres caractères, ils sont parfois source de bug particulièrement vicieux et sournois.

    Si tu as besoin de textes plus agréables pour les humains utilise un formulaire et des étiquettes. Ils sont là pour cela.

    A+
    Pour les stocks, les mouvements se font surtout en interne avec un faible roulement donc on ne date pas les entrées et sorties mais merci aussi pour ces infos

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/10/2014, 11h19
  2. Réponses: 2
    Dernier message: 07/12/2010, 16h47
  3. Réponses: 6
    Dernier message: 15/06/2010, 03h18
  4. Réponses: 170
    Dernier message: 12/08/2009, 08h56
  5. [Access] Requête sur une table et tri sur une autre
    Par VooDooS dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/08/2006, 15h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo