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 :

Enregistrements non liés mais malgré tout combinés [AC-2003]


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2013
    Messages : 45
    Points : 30
    Points
    30
    Par défaut Enregistrements non liés mais malgré tout combinés
    Bonjour, bonjour,

    J'ai un souci avec une requête.
    Je pars de deux tables liées entre elles (clé primaire > clé étrangère). La requête réunis certains champs de la première table, et des champs de la seconde.

    Plutôt que d'aligner uniquement les enregistrements mutuellement spécifiques, c'est à dire ceux qui sont strictement liés dans chacune des tables (i.e l'enregistrement 13 de la table 2 est lié à l'enregistrement 13 de la table 2), le résultat me présente une combinatoire.
    Au final, chaque enregistrement de la première table se retrouve associé, respectivement, à chacun des enregistrements de la seconde table, ce qui crée une nouvelle ligne (enregistrement) à chaque fois, soit autant de ligne (enregistrement) qu'il n'existe de combinaisons entre les enregistrement de la table 1 et ceux de la table 2.

    Devant l'échec à créer une requête qui appelle certains champs de chacune des tables, j'ai tenté d’appeler l'ensemble de chacune des deux tables (vous savez, l'astérisque qui est présent dans la première ligne de la fenêtre qui présente les champs de chaque table importée dans la requête). Pas mieux...

    Quelqu'un a-t-il une idée, s'il vous plaît, de la cause ?

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Comment avez vous spécifié votre jointure ? INNER JOIN ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2013
    Messages : 45
    Points : 30
    Points
    30
    Par défaut
    Bonjour Tofalu, merci de votre aide et de votre grande réactivité.


    Je vais voir ce que ça donne en cherchant à partir de Inner Join.

    Pour la réponse à votre question, c'est non.
    J'avais ajouté un champ "NomSocieteMere", que j'ai mis en "clef étrangère" dans la table 1. Dans la table 2, j'ai défini le champ Nom comme clef primaire. Puis j'ai mis une relation d'intégrité 1 à N entre les tables 1 et 2 sur le Nom avec Mise à Jour en cascade activée (et idem pour les suppressions). La relation d'intégrité est établie, j'avais bien vérifié que les informations étaient identiques entres les deux tables
    Je pensais que cela suffisait à lier les tables et ne connaissais pas la relation Inner Join.

    En fait, j'ai fait ceci suit à une demande que j'ai postée sur ce forum. J'avais des besoins spécifiques et n'avais pas trouvé les réponses ailleurs. Voilà le lien, mais vous perdriez votre temps à lire tout ceci. J'inscris le lien ici pour d'autres, qui pourraient être dans la même problématique que moi.

    Mille merci encore.
    Henri

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Imaginons une table tblSociete(idSociete,NomSociete,PDG, etc.) et une table tblAgence(idAgence,NomAgence,VilleAgence,ResponsableAgence,idSociete#)

    idAgence est la clé primaire de la table tblAgence
    idSociete est la clé primaire de la table tblSociete
    idSociete est la clé étrangère de la table tblSociete dans la table tblAgence

    La requête listant les sociétés et leurs agences sera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT NomSociete,NomAgence,VilleAgence 
    FROM tblSociete INNER JOIN tblAgence ON tblSociete.idSociete=tblAgence.idSociete

    Si la table tblSociete contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1	CASTORAMA	Mr Dupont
    2	LEROY MERLIN	Mr Durand
    Et tblAgence contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    1 Casto Magasin de Chalon		Mr Paul		Chalon sur Saone
    1 Casto Magasin de Bourg En Bresse	Mr Paul		Bourg en Bresse
    1 Casto Lyon				Mr Jacques	Dardilly
    2 LM Lyon Sud				Mme Simone	Saint Priest
    2 LM Mâcon				Mme Simone	Mâcon
    On aura :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CASTORAMA	Casto Magasin de Chalon			Chalon sur Saone
    CASTORAMA	Casto Magasin de Bourg En Bresse	Bourg en Bresse
    CASTORAMA	Casto Lyon				Dardilly
    LEROY MERLIN	LM Lyon Sud				Saint Priest
    LEROY MERLIN	LM Mâcon				Mâcon

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2013
    Messages : 45
    Points : 30
    Points
    30
    Par défaut
    Votre message est clair et pédagogique. Merci.

    Mais j'ai deux gros problèmes, je crois. Pour résumer ce message, voici les deux questions correspondantes:
    1) est-il possible de développer une requête INNER JOIN basée sur des requêtes dont les tables sont liées ?
    2) les accents et les espaces contenus dans les noms que j'ai attribués posent-ils problème ?

    Si besoin de précision, voyez ci-dessous une explication plus détaillée des deux problèmes.

    1) Grossière omission de ma part (j'étais concentré sur le reste, vraiment toutes mes excuses). En fait, il me faut joindre des enregistrements qui se trouvent dans des requêtes basées sur des tables, et non directement sur les tables elles-mêmes.
    Donc j'imagine que c'est toujours faisable, mais qu'il faut que je spécifie les conditions dans la requête INNER JOIN, et non pas en faisant appel à des requêtes déjà existantes (et qui contiennent les conditions en question, puisqu'il me faut retenir seulement certains enregistrements parmi tous ceux présents dans les tables).
    J'ai commencé à chercher, mais je ne trouve rien de très clair (le mot "requête" embrouille tout, puisqu'il correspond à la fois à la requête que je cherche à construire, et aux requêtes que je souhaite appeler dans la requête INNER JOIN).

    2) J'ai tenté de traduire la formule, juste pour l'entraînement. ça ne marche pas. Probablement les noms de champs que j'ai attribué à l'époque ne sont-il pas dans la norme "Access" et induisent le logiciel en erreur.
    Si tel est le cas, il me semble difficile de mener mon travail à bien, car cela veut dire renommer tous les champs, et perdre toutes mes précédentes requêtes enregistrées, ainsi que risquer de perdre les relations d'intégrités préalablement établies (et probablement bien d'autres conséquences que je suis pas capable de prévoir)

    Voici le copié-collé:
    SELECT Type produit, Entité sociale,
    FROM tblDTC/SANTE >100 INNER JOIN tblCompagnies Mères ET/OU qui rachètent ON tblDTC/SANTE >100.idCompagnie Mère & http=tblCompagnies Mères ET/OU qui rachètent.idNomSocieteMere;


    Le logiciel me dit "erreur de syntaxe". J'ai donc essayé d'ajouter des crochets à partir de ce que j'ai vu ailleurs (j'ai aussi essayé avec ou sans virgule après "Entité sociale", mais vraiment ne vous embêtez pas avec ces détails que je saurez résoudre si je décide de persévérer). Cela donne:


    SELECT [Type produit], [Entité sociale],
    FROM tblDTC/SANTE >100 INNER JOIN tblCompagnies Mères ET/OU qui rachètent ON tblDTC/SANTE >100.idCompagnie Mère & http=tblCompagnies Mères ET/OU qui rachètent.idNomSocieteMere;

    Cela ne marche pas mieux.
    Peut-être est-ce dû au fait que les clefs primaires et clefs étrangères n'ont pas le même nom. J'ai essayé différentes choses, il me parle aussi "d'erreur de syntaxe dans la clause FROM". Là encore, ne vous attardez pas sur ces détails, ma question est plus générale.

  6. #6
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Pour répondre simplement :

    1. C'est tout à fait possible. Vous pouvez très bien écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT NomSociete,NomAgence,VilleAgence 
    FROM UneRequete INNER JOIN tblAgence ON UneRequete .idSociete=tblAgence.idSociete
    Il faut juste prendre garde à lier correctement les champs.

    Par exemple si ma requête : TriDesSocieteBricolage est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT idSociete AS IdBricolage,NomSociete FROM tblSociete
    Ma requête de jointure sera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT NomSociete,NomAgence,VilleAgence 
    FROM TriDesSocieteBricolage INNER JOIN tblAgence ON TriDesSocieteBricolage.IdBricolage=tblAgence.idSociete
    Car dans TriDesSocieteBricolage, la clé s'appelle IdBricolage et non idSociete (c'est le AS qui renomme le champ)

    2. Les caractères spéciaux ne sont pas recommandés mais toutefois pas problématiques s'ils sont systématiquement encadré par des crochets :

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [Un Champ de %] FROM [Une requête à la noix qui trie des $]

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2013
    Messages : 45
    Points : 30
    Points
    30
    Par défaut
    Tofalu, vous êtes le rédacteur le plus rapide de tout l'Ouest. Je vous dédicacerai un vers dans mes remerciements de thèse (disons que je généraliserai à la communauté Developpez.com !). C'est parfois un enfer, mais sans vous ce serait la damnation éternelle !!!

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2013
    Messages : 45
    Points : 30
    Points
    30
    Par défaut
    En fait, Access accepte ma formule, mais me donne un résultat complétement vide. Les deux champs que j'ai appelés sont là (chacun issus d'une "table" différente), mais il n'y a aucun enregistrement (en pièce jointe, une capture d'écran).
    Pour autant, la liaison entre les deux tables est bien établie car si je modifie quelque chose dans le champ "clé primaire" de la table T, cela se répercute dans le champ "clé étrangère" qui lui est lié de la table T2.

    Voilà la formule:
    SELECT [Entité sociale], [M-Rachat]
    FROM [DTC/SANTE >100] INNER JOIN [Compagnies Mères ET/OU qui rachètent] ON [DTC/SANTE >100].idNomSocieteMere=[Compagnies Mères ET/OU qui rachètent].idNomSocieteMere;

    Je suis certain qu'il y a des informations dans chacun des champs, le premier étant systématiquement complet, ce qui n'est pas le cas pour le second champ (mis à part le premier, aucun autre champ est systématiquement complet, je ne peux faire l'essai).
    Images attachées Images attachées  

  9. #9
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Est ce que vous pouvez poster une capture d'écran des deux tables avec un exemple d'enregistrement en commun, car là, en théorie, cela devrait fonctionner.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/03/2011, 17h04
  2. Pas d'erreur, mais d'enregistrement non plus
    Par ke2007 dans le forum Requêtes
    Réponses: 1
    Dernier message: 20/06/2008, 15h28
  3. [MySQL] Peu importe la taille du tableau, SQL est censé tout enregistrer(non pas foreach :D )
    Par Dermiste dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/04/2008, 01h47
  4. Rafraichir un formulaire mais pas toute la page
    Par MinsK dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/05/2006, 14h05
  5. Réponses: 3
    Dernier message: 14/03/2006, 11h34

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