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 :

Requête pour liste de choix en évitant les éléments déjà présents


Sujet :

Requêtes et SQL.

  1. #1
    Invité
    Invité(e)
    Par défaut Requête pour liste de choix en évitant les éléments déjà présents
    Bonjour à tous,

    Je recherche de l'aide pour une question un peu difficile à exprimer et pour laquelle mes recherches sur le net ne donne rien. Je précise que mes cours de SQL sont loins derrière moi et que je découvre Access, ce n'est pas mon domaine de compétences.
    Néanmoins la base que je créé depuis 1 mois fonctionne bien mais je cherche à y mettre quelques garde-fou pour éviter les mauvaises manipulations de l'utilisateur.

    Je vais m'appuyer sur une base que j'ai créé exprès pour vous faire un exemple, vous la trouverez en pièce jointe en version Access 2000.
    Si je réduis mon problème au minimum, voilà en gros comment se présente les relations de ma base :


    En se basant là dessus, l'utilisateur pourra sélectionner dans un formulaire avec des listes de choix : une personne, un modèle de voiture et la quantité possédée. Seulement je voudrais faire en sorte qu'il soit impossible pour une personne donnée de sélectionner un modèle de voiture qui l'ait été dans un autre enregistrement.

    Mes recherches sur le net m'ont amené sur l'idée de modifier la requête qui permet de remplir la liste de choix des voitures. L'idée était d'utiliser un WHERE NOT EXISTS en SQL (que je connais peu) pour éliminer les éléments déjà dans la liste.
    Ca pourrait ressembler à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT IDCar
    FROM Car
    WHERE NOT EXISTS
    (
    SELECT JointIDCar, JointIDPeople
    FROM JointTable
    WHERE JointIDPeople = JointIDPeople.actuel
    )
    J'ai mis de côté les inner join (que Access met tout seul) pour simplifier mais je pense qu'il y a pas mal de fautes. Le problème principal reste surtout ligne 7 avec mon ".actuel" qui n'existe pas du tout mais que je ne vois pas comment exprimer.
    Il y a un obstacle supplémentaire en considérant que l'enregistrement n'est pas encore sauvegardé et donc que le JointIDPeople n'est pas connu au moment de la recherche. Je me disais qu'en utilisant une macro je pourrais forcer l'enregistrement pour qu'il existe malgré tout.
    Bref, tout ça devient un peu trop bidouille à mon goût et j'ai besoin d'avis extérieur.

    1. Est-ce la bonne voie qu'utiliser le WHERE NOT EXISTS ? Si oui, comment pourrais-je l'implanter ?
    2. Est-ce que je veux faire est tout simplement possible ?
    3. Avez-vous d'autres idées à explorer ? D'autres solutions ?


    Ce n'est pas un point essentiel, dans mon application la liste équivalente à la liste des voitures ici est petite, ce qui permet de contrôler assez facilement les données. Néanmoins, pour le confort de l'utilisateur et par curiosité j'aimerai savoir si c'est faisable.
    Et au pire, je lui mettrai à disposition une requête de recherche de doublons et il corrigera le tir lui même.

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

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 063
    Points : 24 668
    Points
    24 668
    Par défaut
    Bonjour,
    J'ai lu en travers ta longue prose et vu ta demande : à savoir trouver l'équivalent de NOT EXISTS en SQL Access, je dirais simplement NOT IN()

    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT IDCar
    FROM Car
    WHERE Car.IDCar NOT IN
    (
    SELECT JointIDCar
    FROM JointTable
    WHERE JointIDPeople = JointIDPeople.actuel
    )
    Il y a un tuto sur cet opérateur spécifique, que tu peux consulter sur ma page. Tu y trouveras notamment une mise en garde.

    Bonne lecture.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour loufab,

    Merci pour ta réponse. Je me doutais bien que mon post était trop long mais au moins il n'y avait pas d'informations manquantes

    J'ai exploré ta solution, malheureusement je suis toujours bloqué avec le ".actuel". Je ne pense pas que ce que je cherche sois possible, du moins pas de la façon dont je l'implante (il n'y a pas un genre de This Row comme dans Excel) .

    En revanche, j'ai pu me servir de tes conseils pour créer des requêtes de vérification d'erreurs et ça me convient très bien.

    Merci !

    EDIT:
    Au cas où ça intéresserait des gens qui découvre Access comme moi, je pense avoir trouvé une bonne piste. Il faut regarder du côté des Listes déroulantes en cascade ou Cascading combobox en anglais.
    Je pense que ce que je cherche à faire est possible par ce biais, reste à creuser si je trouve suffisamment de temps.
    Au passage, il semblerait que ce soit une nouvelle fonctionnalité de Access 2013.
    Dernière modification par Invité ; 21/08/2013 à 10h48. Motif: Nouvelles infos trouvées

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 063
    Points : 24 668
    Points
    24 668
    Par défaut
    On peut faire des listes déroulantes en cascade avec les versions précédentes (même la version 2.0).


    Il suffit d'affecter la nouvelle source à la liste au moment de la définition de la liste "parente", notamment sur l'évènement Après MAJ.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/09/2014, 21h31
  2. [AC-2003] Bouton delete pour liste a choix multiples
    Par castours dans le forum IHM
    Réponses: 5
    Dernier message: 28/01/2013, 19h26
  3. Réponses: 5
    Dernier message: 22/05/2012, 17h34
  4. [AC-2007] Liste de choix qui affiche les ID
    Par Carclin dans le forum IHM
    Réponses: 11
    Dernier message: 12/05/2010, 13h31
  5. vba requête paramétrée liste de choix déroulante
    Par langelot222 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 11/05/2007, 16h38

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