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

Access Discussion :

Comparer champs tables


Sujet :

Access

  1. #1
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut Comparer champs tables
    Bonjour,

    Etant sur un gros projet je me retrouve confronté à un problème.
    J'aimerai comparer différents champs afin de déterminer la nature d'un élément.

    Je m'explique, j'ai une base Access contenant une table avec numéro de lot, code article, le type de l'article (voir si c'est du déchet, si c'est bon, du surplus/sousmesure), le genre de mon article (dalle ou rouleau), la largeur, longueur, etc

    Mon problème est que j'aimerai déterminer pour la valeur "Surplus/SousMesure" du champs "Type" si c'est du Surplus ou de la Sous Mesure. Pour se faire il faut que je compare les dimensions des lignes contenant "Surplus/SousMesure" aux lignes ne contenant rien dans le champs "Type". Si les dimensions des lignes contenant "Surplus/SousMesure" dans le champs "Type" sont inférieures aux lignes ne contenant rien dans le champs "Type" alors c'est de la sous mesure, si c'est égale c'est du Surplus.

    Je vous joint un exemple de ma base.

    Pour se faire j'ai créé une requête ne contenant que les lignes "Surplus/SousMesure", je pensais la comparer à ma table mais je bloque...

    J'espère avoir été suffisamment clair.

    Merci d'avance pour votre aide!
    Fichiers attachés Fichiers attachés

  2. #2
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    Bonjour,


    Je n'ai pas réussis à comprendre ce que tu souhaites faire exactement...

    Par quoi est définit un type? Par ses dimensions?
    Si oui, ne peux tu pas simplement faire un champ calculé et dire que:
    si la valeur de ce champs est >x, alors type = surplus
    si la --------------------------- >y, ----------- = sous mesure
    Exemple de code pour un formulaire que tu mettrais dans ton champ calculé après mise à jour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if me![ChampCalculé]>5 then me![type]="Surplus"
    if me![ChampCalculé]<5 then me![type]="Sous mesure"

    Je suppose que ton problème est certainement plus compliqué que cela mais à voir si ça peut t'aider...


    A bientôt.

  3. #3
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 869
    Points : 3 448
    Points
    3 448
    Par défaut
    Bonjour John Parker,

    Hummmm pas clair. J'ai regardé la table et je vois ceci: Lot 9 contient article 9, 10, 11, 12 et 13. Donc est-ce qu'on fait la comparaison entre articles ou lots? Deuxièmement Article 4, 2 lignes sans "Surplus/SousMesure" une avec longueur 11.4 et l'autre 13, on fait la comparaison avec laquelle des 2 lignes?

    Voici un exemple qui peut te donner une piste mais je manquais de précisions...

    Bonne chance
    Fichiers attachés Fichiers attachés
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  4. #4
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Bonjour et merci pour vos réponses!

    Je vais tâché d'être plus clair.

    En réalité un lot correspond à un produit et dans ce même lot nous retrouvons plusieurs articles. Ce qui fait que l’appellation des articles n’est pas la même est leur longueur, pour faire simple dès que la longueur du rouleau change le code article est différent.

    Le but est de déterminer si les lignes contenant « Surplus/SousMesure » dans le champ « Type » correspondent à du surplus OU à de la sous mesure. Jusque la pour les différencier je devais comparer à la main les longueurs et largeurs des lignes contenant « Surplus/SousMesure » par rapport aux lignes ne contenant rien dans le champs « Type ». Si la largeur et le format d’une ligne contenant « Surplus/SousMesure » est le même qu’une ligne ne contenant rien dans le champ « Type » pour un même lot alors c’est du surplus. Si le format (longueur et largeur) est inférieur (ce qui veut dire que les largeurs et longueurs sont différents de celles des lignes ne contenant rien dans le champ « Type ») alors c’est de la sous mesure.

    Pour faire simple il faut comparer les longueurs et largeurs des lignes contenant « Surplus/SousMesure » aux longueurs et largeurs des lignes ne contenant rien dans le champ « Type » afin de déterminer si c’est du surplus ou de la sous mesure.

    J’espère être plus clair.

    Encore merci pour votre aide !

  5. #5
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 869
    Points : 3 448
    Points
    3 448
    Par défaut
    Bonjour John Parker,

    Toujours pas évident... pour quelqu'un qui est dans ton métier c'est peut-être plus clair mais pas pour moi.

    Que dis-tu de l'exemple que je t'ai fait?
    Je compare article par article et lorsqu'un article a plus d'une ligne vide je prend la plus grande longueur des 2 lignes.

    Dans ton explication tu dis:
    Ce qui fait que l’appellation des articles n’est pas la même est leur longueur, pour faire simple dès que la longueur du rouleau change le code article est différent.
    Cette affirmation me porte à croire que la comparaison se fait donc en fonction de l'article, est-ce vrai?

    Cependant dans la table que tu as fournie il me semble que c'est plutôt la largeur qui fait la différence entre les articles.

    Tu dis aussi:
    Le but est de déterminer si les lignes contenant « Surplus/SousMesure » dans le champ « Type » correspondent à du surplus OU à de la sous mesure. Jusque la pour les différencier je devais comparer à la main les longueurs et largeurs des lignes contenant « Surplus/SousMesure » par rapport aux lignes ne contenant rien dans le champs « Type ».
    Je reviens donc avec mon deuxième commentaire, dans la table que tu as fournie il y a 8 lignes avec le LOT 4 qui sont toutes article 4. De ses 8 lignes il y en a 3 = Surplus/SousMesure, 1 = DEFAUT, 2 = DECHET et finalement 2 vides laquelle des 2 lignes vides est la bonne?

    Bonne chance
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  6. #6
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    En effet, je me suis trompé, c’est la largeur qui détermine le numéro de l’article.
    Prenons l’exemple du lot 4, l’ID 14 ayant la même longueur que l’ID 8 c’est du surplus. Les ID 12 et 13 ayant une longueur qu’on ne retrouve pas alors c’est de la sous mesure.
    Dans ma comparaison il faut inclure les lignes n’ayant rien dans « Type » ainsi que celles ayant « DEFAUT »

    Merci pour ton aide

  7. #7
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 869
    Points : 3 448
    Points
    3 448
    Par défaut
    Bonjour John Parker,

    Donc la requête que j'ai fait est bonne.

    Pour inclure "DEFAUT" tu n'as qu'à modifier la première requête (R_Article) comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Prod_Dim.Article, Prod_Dim.Genre, Max(Prod_Dim.Longueur) AS MaxDeLongueur
    FROM Prod_Dim
    WHERE (((Prod_Dim.Type) Is Null Or (Prod_Dim.Type)="DEFAUT"))
    GROUP BY Prod_Dim.Article, Prod_Dim.Genre;
    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  8. #8
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Bonjour et merci pour le code,

    Cependant il n'est pas juste de comparer seulement à la longueur max de l'article, il faudrait comparer a toutes les longueurs des lignes comprenant rien ou "DEFAUT" dans "Type", si l'on retrouve la même longueur alors "Surplus" sinon "SousMesure"

    De plus il faut comparer au sein d'un même lot


    Pour mieux comprendre regarde le Lot 4 du fichier que je joins ID 53 devrait être du surplus et non de la sous mesure

    Merci
    Fichiers attachés Fichiers attachés

  9. #9
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 869
    Points : 3 448
    Points
    3 448
    Par défaut
    Bonjour John Parker,

    Ok maintenant je comprend ce que tu veux.

    Mauvaise nouvelle, je ne vois pas comment faire cela avec une requête... Il y a peut-être d'autres blogueurs qui sont plus forts que moi en SQL qui pourraient trouver une solution.

    Une fonction qui boucle sur les enregistrements pourrait faire l'affaire. Pour chaque lot ayant Surplus/SousMesure tu vérifies le même lot ayant vide ou DEFAUT, si un match = Surplus si pas match = SousMesure.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  10. #10
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Robert1957,


    Dommage...

    Je me disais, je crois qu'il existe une requête de correspondance dans access. Admettons que j'ai 2 requêtes au préalable, une contenant uniquement mes lignes "Surplus/SousMesure" et une seconde contenant uniquement "Null" et "DEFAUT". Si je créais une seconde requête de correspondance me basant sur le lot, l'article et la longueur je devrais avoir les résultats correspondant à "Surplus" non? Après il faudrai que je lie cette requête à la requête de base.

    Penses-tu que ça peut marcher?

  11. #11
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 869
    Points : 3 448
    Points
    3 448
    Par défaut
    Bonjour John Parker,

    Comme je te disais, je ne vois pas comment faire cela dans une requête. Tu dois parcourir les enregistrements correspondant pour voir la longueur de tous les enregistrements qui ont "vide" ou "Defaut". Si un de ces enregistrements est = à ce moment là tu inscrits "Surplus" et ça doit être fait pour tous les enregistrements qui ont "Surplus/SousMesure".

    Une fonction que tu pourrais insérer dans ta requête pourrait faire cela. Directement en SQL, je ne vois pas comment.

    Si tu veux ou si tu n'as pas de meilleur choix, je te ferai un exemple.

    Bonne chance
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  12. #12
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Bonjour Robert1957,

    Un exemple m'aiderait bien si ça ne te dérange pas car je ne vois pas trop comment faire...

    Merci

    Bonne journée

  13. #13
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    J'y suis arrivé!

    J'ai créé une requête contenant uniquement les Sous mesures!

    Maintenant est il possible de créer une requête regroupant tous les champs de la table "Prod_Dim" et en remplaçant les occurences "Surplus/SousMesure" par la valeur exacte "Surplus" ou "SousMesure" maintenant que l'on a réussi à les séparer dans des requêtes différentes?
    Fichiers attachés Fichiers attachés

  14. #14
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 869
    Points : 3 448
    Points
    3 448
    Par défaut
    Bonjour John Parker,

    Je vois pas très bien ce que tu as réussi à faire. Je te joints un exemple de ce que je connais.

    Bonne journée
    Fichiers attachés Fichiers attachés
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Bonjour John
    As-tu essayer de faire une double requete?
    Cela permettrait d'analyser une ligne avec toute une table il me semble

    Petit exemple :
    Select nomClient
    FROM Client
    Where VilleClient=(Select NomVille FROM Ville WHERE metier=Docteur)

    Je pense qu'un truc comme ca marcherai
    mais je suis pas un dieu du SQL

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Bonjour John
    As-tu essayer de faire une double requete?
    Cela permettrait d'analyser une ligne avec toute une table il me semble

    Petit exemple :
    Select nomClient
    FROM Client
    Where VilleClient=(Select NomVille FROM Ville WHERE metier=Docteur)

    Je pense qu'un truc comme ca marcherai
    mais je suis pas un dieu du SQL

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Bonjour John
    As-tu essayer de faire une double requete?
    Cela permettrait d'analyser une ligne avec toute une table il me semble

    Petit exemple :
    Select nomClient
    FROM Client
    Where VilleClient=(Select NomVille FROM Ville WHERE metier=Docteur)

    Je pense qu'un truc comme ca marcherai
    mais je suis pas un dieu du SQL

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Bonjour John
    As-tu essayer de faire une double requete?
    Cela permettrait d'analyser une ligne avec toute une table il me semble

    Petit exemple :
    Select nomClient
    FROM Client
    Where VilleClient=(Select NomVille FROM Ville WHERE metier=Docteur)

    Je pense qu'un truc comme ca marcherai
    mais je suis pas un dieu du SQL

  19. #19
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Bonjour,

    Merci pour vos réponses.

    En fait j'y suis arrivé autrement en créant une requête de non correspondance entre ma requête contenant "Surplus/SousMesure" et la requête contenant tout sauf "Surplus/SousMesure" ce qui me donne mes "sous mesures".
    Ensuite je créais une requête de non correspondance entre ma requête contenant "surplus/sousmesure" et ma requête contenant uniquement les "sous mesures" ce qui me donne le "surplus".

    Ensuite je fais une union de 3 requêtes (sous mesure + surplus + tout le reste) et j'obtiens bien le tout.

    Le seul problème est que je dois passer par du SQL et que je ne peux pas cacher certains champs dans mon résultat final ...

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/04/2012, 14h40
  2. [WD16] Comparer champ et donnée d'une table ?
    Par christophe9117 dans le forum WinDev
    Réponses: 6
    Dernier message: 10/05/2011, 15h53
  3. Réponses: 5
    Dernier message: 04/04/2010, 00h14
  4. comparer champ texte à champ d'une table
    Par Marcopololo dans le forum IHM
    Réponses: 1
    Dernier message: 03/08/2008, 21h16
  5. Comparer 2 tables d'une même bdd sur 2 champs
    Par Hervé21 dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/12/2007, 09h16

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