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 :

Lister tous les enregistrements comportant une même valeur mais dans des champs différents


Sujet :

Access

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Lister tous les enregistrements comportant une même valeur mais dans des champs différents
    Bonjour,

    comment lister les enregistrements d'une table qui comporteraient 12 champs "couleurs" (coul1, coul2...coul12), en fonction d'une couleur qui pourrait se trouver dans n'importe quel champ.

    enr1 jaune vert bleu ...
    enr2 mauve bleu rouge ...
    enr3 rouge vert jaune

    si ma requête est : quels sont les enregistrements qui contiennent "jaune" alors le résultat est : enr1, enr3
    si ma requête est : quels sont les enregistrements qui contiennent "bleu" alors le résultat est : enr1, enr2

    je pose cette question car il n'existe que 9 lignes de critères dans les requêtes et que mon problème doit traiter 12 champs voire plus.

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 750
    Points : 57 570
    Points
    57 570
    Billets dans le blog
    42
    Par défaut
    bonjour,

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM LaTable
    WHERE "Jaune" IN (coul1, coul2, ..., coul12) ;

    De mémoire, ça devrait marcher.
    L'écriture avec IN est sympa, par contre les performances...

  3. #3
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut
    Bonjour,

    Voici un de mes codes que je t'ai adapté mais je ne l'ai pas testé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Function ColorCount(oTable as string, oColor as string) as Long
    Dim Db as DAO.Database
    Dim rst=DAO.Recordset
     
    Dim i as Integer
    Dim j as Integer
     
    'oTable = Nom de ta table ou de ta requête
    'oColor=Nom de la couleur
     
    j = 0 'Increment pour chaque valeur trouvée
     
    'S'il y a des données dans la table
    If DCount("*", oTable) > 0 Then
            Set Db = CurrentDb 'Ouverture de la base de données
        Set rst = Db.OpenRecordset(oTable, dbOpenDynaset) 'Ouverture de la table
     
        Do Until rst.EOF 'Parcours la table tant que l'on est pas sur le dernier enregistrement
            For i = 0 To rst.Fields.count - 1 'Pour chaque enregistrement, on parcours chaque champs
                If rst.Fields(i)=oColor Then
                    j = j + 1 'Increment le compteur
                End If
            Next i 'Fin de la boucle pour chaque champs
     
            rst.MoveNext 'Va sur l'enregistrement suivant
        Loop 'Fin de la boucle pour chaque enregistrement
        rst.Close: Set rst = Nothing 'Fermeture de la table
    End If    
     
    ColorCount=j
    End Function
    Pour appeler le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim k as long
    k=ColorCount("NomTable","NomCouleur")
    MsgBox k
    Cordialement

    Christophe

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par f-leb Voir le message
    bonjour,

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM LaTable
    WHERE "Jaune" IN (coul1, coul2, ..., coul12) ;

    De mémoire, ça devrait marcher.
    L'écriture avec IN est sympa, par contre les performances...
    Bonjour
    Merci pour votre patience !

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par f-leb Voir le message
    bonjour,

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM LaTable
    WHERE "Jaune" IN (coul1, coul2, ..., coul12) ;

    De mémoire, ça devrait marcher.
    L'écriture avec IN est sympa, par contre les performances...
    Bonjour
    Merci pour votre patience...

    C'est effectivement une solution que je trouve élégante. Mais il faut ajouter que son emploi sous cette forme n'est pas courant. En effet, tous les contributeurs à l'emploi de l'opérateur IN en SQL que j'ai trouvé sur le web proposent de faire précéder IN par le NOM_DU_CHAMP suivi de l'ensemble des valeurs sur lequel porte la requête. Dans votre solution c'est l'inverse, et ça marche à double titre ! D'une part car cela démontre à réversibilité de l'opérateur, et d'autre part car elle permet de contourner la limite de taille de l'interpréteur SQL d'ACCESS. En effet, pour revenir à mon problème, je ne pouvais par construire ma requête avec 12 OU comportant eux-mêmes 12 valeurs car un message d'erreur indiquait : « Ressources système insuffisantes » ou « La requête est trop complexe ».
    Maintenant cela fonctionne parfaitement.
    J'espère que cette astuce profitera à beaucoup de monde.

    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/07/2012, 11h59
  2. Réponses: 4
    Dernier message: 29/01/2009, 14h33
  3. Effacer tous les enregistrements d'une table
    Par plutonium719 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/08/2006, 15h05
  4. Comment lister tous les composants d'une fiche ?
    Par tipiweb dans le forum Langage
    Réponses: 2
    Dernier message: 18/01/2006, 21h53
  5. Afficher tous les enregistrements d'une table
    Par bertrand_declerck dans le forum QuickReport
    Réponses: 2
    Dernier message: 08/07/2005, 08h35

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