Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Messages recommandés

Posté(e) (modifié)

Bonsoir tout le monde

 

J'ai un petit souci pour faire un requête SQL :

 

Voici mes tables :

 

r13q5qic.jpg

 

( /!\ Il n'y qu'une seule table joueur mais le fait d'avoir deux clé étrangères dans PARTIEMULTI est géré comme ça sur Access)

 

C'est la base de données d'un petit jeu que j'ai fait sous VB.

 

La requête que je cherche à faire est censée afficher :

 

numpartie - scorejou1 - scorejou2 - pseudojou (joueur 1) - pseudojou (joueur 2) - datepartiemulti

 

Mais j'ai un problème car le résultat de la requête est vide alors que j'ai deux parties enregistrées dans la table.

 

Voici la requête :

 

SELECT partiemulti.numpartiemulti, partiemulti.scorejou1, partiemulti.scorejou2, joueur.pseudojou, joueur.pseudojou, partiemulti.datepartiemulti

FROM partiemulti, joueur

WHERE joueur.pseudojou=partiemulti.numjou1

AND joueur.pseudojou=partiemulti.numjou2;

 

J'espère être assez compréhensible

 

A++

Modifié par Raphdu01

Posté(e)

La seule fois où tu auras ta clause WHERE qui sera vérifiée c'est quand partiemulti.numjou1 = partiemulti.numjou2 !

 

Si tu veux récupérer les infos de deux joueurs, il faut deux fois une jointure sur la table joueurs.

 

Autre chose, je suppose que numjou est la clé de joueur donc il faut faire la jointure sur numjou et pas pseudojou

 

SELECT p.numpartiemulti, p.scorejou1, p.scorejou2, j1.pseudojou, j2.pseudojou, p.datepartiemulti
FROM partiemulti p, joueur j1, joueur j2
WHERE j1.numjou = p.numjou1
AND j2.numjou = p.numjou2;

Posté(e) (modifié)

Merci Kewlcat c'est reglé.

 

Tu avais bien supposé pour la clé primaire de joueur, et pour les jointures je me suis simplement planté en recopiant je les avais bien faites avec numjou1 et numjou2.

 

Et donc si j'ai bien compris le fait de rajouter j1 et j2 permet de "simuler" une deuxième table joueur pour que la requête ne se mélange pas entre les deux pseudojou ??

 

En tout cas ça à l'air de marcher marche niquel (juste sous vb il faut enlever les "p.*" mais surtout pas les "j1.*" et "j2.*")

 

Merci beaucoup à toi

 

a++

Modifié par Raphdu01
Posté(e)
si j'ai bien compris le fait de rajouter j1 et j2 permet de "simuler" une deuxième table joueur pour que la requête ne se mélange pas entre les deux pseudojou ??
Euh... Oui... Si tu veux....

En fait, il s'agit d'aller chercher deux infos différentes (par deux id (deux "clés") différent(e)s) dans la table, donc tu as besoin de "deux accès" à la table : le premier pour l'enregistrement correspondant au premier joueur, et le second accès pour récupérer les infos du second joueur. Deux enregistrements distincts => deux jointures.

 

"p", "j1" et "j2" c'est ce qu'on appelle des alias. Ca permet non seulement de raccourcir les requêtes en gagnant de la place sur les préfixes, mais surtout de différencier les jointures vers une même table (ce qui est notre cas ici). J'ignorais qu'Access refusait qu'on utilise un alias pour une table qu'on ne référence qu'une seule fois... (et effectivement il faut éviter d'oublier les préfixes j1. et j2. sinon on obtient une magnifique erreur "nom de colonne ambigu" ou quelque chose d'équivalent)

Posté(e) (modifié)
J'ignorais qu'Access refusait qu'on utilise un alias pour une table qu'on ne référence qu'une seule fois

 

Ce n'est pas Access qui refuse mais Visual Basic (car j'utilise cette requête pour remplir un tableau de score sur une appli vb avec un DataGridView). Je fait simplement mes requêtes sur Access pour les tester quand je n'arrive pas à faire ce que je veux sur vb car je trouve ça plus clair..

 

Pour la requête les alias ne posent pas de problèmes sous vb, mais au moment d'entrer le résultat de la requête dans un DataGridView, je doit écrire :

 

GrdScoreMulti.Rows.Add(drr("numpartiemulti"), drr("j1.pseudojou"), drr("scorejou1"), drr("scorejou2"), drr("j2.pseudojou"), drr("datepartiemulti")).

 

Si je met les alias, devant numpartiemulti par exemple, ça ne marche plus. Et inversement si je les enlève pour pseudojou ça ne marche plus..

Modifié par Raphdu01
Posté(e)

Ah ok...

C'est étrange que les noms de colonnes dans les ResultSets (DataSets ?) ne soient pas ceux utilisés dans le select... (i.e. on le met avec un préfixe, on le récupère avec un préfixe)...

Bref.

 

Content que ton problème soit réglé, en tout cas !

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...