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 :

Ma requête Select me remonte des résultats qui n'existent pas [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut Ma requête Select me remonte des résultats qui n'existent pas
    Bonjour à tous!

    J'ai un problème quelque peu épineux.

    Contexte:

    Je développe une BDD Access 2010 pour gérer le suivi documentaire de mon projet.
    Notre client nous envoi un fichier Excel contenant les données que j'importe dans ma base Access. Comme ce fichier source laisse sérieusement à désirer, je met en place des requêtes pour traiter les éventuelles bourdes qu'ils auraient laissé (Par exemple, une référence en double sur deux documents différents...). Dans le cas présent, la requête en question cherche si des documents précédemment importés n'auraient pas disparu du fichier source.

    Fonctionnement:

    Ma table "T_Import" collecte toutes les versions des fichiers sources de mon client. ma table "T_Document" contient les références et le nom de chacun des documents présents dans mon suivi.
    Si un document est présent dans mon suivi mais pas dans la table import, c'est que le document a été supprimé.

    Reqûete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_Document.NumDoc , T_Document.TitreDoc
    FROM T_Document WHERE  NOT EXISTS ( SELECT T_Import.NumDoc FROM T_Import 
    WHERE T_Import.NumDoc = T_Document.NumDoc AND T_Import.Version=[Formulaires]![F_Principal]![Txt_TableRef]) ;
    (Le T_Import. Version est là pour cibler une version spécifique du fichier importé).

    Problème:

    Dans les résultats de ma requêtes j'ai malheureusement 3 cas de figure:
    -le cas normal ==> La référence remontée existe dans ma table T_Document mais pas dans ma table T_Import
    -le cas gênant ==> La référence est présente dans les deux table (donc ne devrait pas apparaitre)
    -le cas WTF==> La référence est présente dans ma table T_Import mais pas dans ma table T_Document... SELECT T_Document... FROM T_Document... Comment Access peut il me remonter un résultat qui n’existe pas dans la table ciblée??

    Je m'en remet à vous messieurs!

  2. #2
    Invité
    Invité(e)
    Par défaut
    WHERE T_Document.NumDoc NOT in ( SELECT T_Import.NumDoc FROM T_Import
    WHERE T_Import.NumDoc = T_Document.NumDoc AND T_Import.Version=[Formulaires]![F_Principal]![Txt_TableRef])

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut
    Merci pour la correction de syntaxe. C'est plus clair mais malheureusement cela me ressort exactement les même résultats.
    Je vais essayer de mettre une version simplifiée de ma BDD en espérant conserver les mêmes bizarreries.

    Moriceot

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

    pour connaître les numdoc importés qui ne sont pas dans la table document, c'est relativement simple via une jointure gauche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT T_Import.NumDoc
    FROM T_Import LEFT JOIN T_Document ON T_Import.NumDoc = T_Document.NumDoc
    WHERE T_Document.NumDoc Is Null AND T_Import.Version=[Formulaires]![F_Principal]![Txt_TableRef];

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut
    Merci Galoir, je vais essayer ça.

    Par contre je viens de comprendre pourquoi ma requête me remonte des résultats qui n'existent pas dans ma table.
    Il y avait un espace après le mot. Le problème, c'est que j'ai essayé de le traiter avec TRIM mais l'espace ne disparait pourtant pas. A moins que je le supprime manuellement.
    Pourtant la requête est simple. Quelqu'un voit le problème?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE T_Document SET T_Document.NumDoc = Trim$([T_Document]![NumDoc]);
    Merci pour votre aide!

    Moriceot

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut
    Galoir,

    En fait, je m'y prenais exactement comme toi initialement mais on m'a réorienté vers ma technique actuelle pour une raison qui m'a échappé. Je reviendrai vers toi quand je l'aurais retrouvé. ^^

    Quelques précisions sur mon problème.
    C'est bien un problème d'espace. L'ennui c'est que le comportement m'échappe. J'ai trouvé deux livrables qui étaient des doublons à un espace près.
    Disons "Ref" et "Ref ".

    En faisans un filtre "=Ref", (contient "Ref") ou "=Ref ", Access me remonte toujours le résultat sans espace...

    La seule façon que j'ai trouvé de remonter mes deux enregistrements c'est cette requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_Document.NumDoc
    FROM T_Document
    WHERE T_Document.NumDoc LIKE "Ref*"
    ;
    Du coup, comment je peux faire pour remonter tous les enregistrements qui ont un espace à la fin?

  7. #7
    Invité
    Invité(e)
    Par défaut
    le plus simple, pour ne pas trainer des nanards c'est de traiter le problème à la base :
    - soit au moment de l'importation en faisant un TRIM sur les NumDoc (si l'import se fait via fonction VBA perso)
    - Soit après importation en lançant une requete de "nettoyage" (Update et TRIM) pour enlever les espaces superflus sur la colonne numdoc de la table import

  8. #8
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE trim(T_Document.NumDoc)='Ref'

  9. #9
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Bonjour,

    Est-ce bien un espace (code 32), ça pourrait être un espace insécable par exemple.

  10. #10
    Membre du Club
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut C'était un retour à la ligne!
    Bonjour à tous!

    En analysant le fichier source, j'ai vu que ce n'était effectivement pas un espace mais un retour à la ligne "Chr(10)".
    Je l'ai donc traité à la source par un replace dans ma macro d'import.

    Merci pour votre aide!

    Moriceot

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

Discussions similaires

  1. Retourner des enregistrements qui n'existent pas
    Par Cryos dans le forum Développement
    Réponses: 2
    Dernier message: 31/01/2014, 11h15
  2. insertion des numéros qui n'existe pas dans la base de données
    Par cisco.nat dans le forum Général Java
    Réponses: 5
    Dernier message: 09/07/2013, 12h39
  3. Réponses: 1
    Dernier message: 11/05/2011, 14h38
  4. La vue all_synonym contient des synonymes qui n'existent pas
    Par bankette dans le forum Administration
    Réponses: 11
    Dernier message: 30/12/2009, 17h13
  5. Requète select et affichage des données.
    Par morgan47 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 06/10/2009, 09h09

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