DISTINCT dans une requete SQL pour un code VB6

Résolu
chefinf Messages postés 166 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 25 octobre 2011 - 26 juin 2008 à 15:35
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 - 2 juil. 2008 à 22:10
J'ai fais une requete sql sous vb6 pour selectionner des lignes sans doublons au niveau de champ telephone, mais je rencontre une erreur lors de l'execution. Le programme ne connait plus la fonction Distinct pour un seul champ.

La requete est comme suit:

Select nom, prenom, ville, distinct(telephone)
From Client;

Aidez moi a trouver une solution SVP.
 

.
A voir également:

20 réponses

LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
2 juil. 2008 à 22:10
Salut,
L' idéal c' est :
1-Créer à l' identique une copie de ta table.
2-Faire une requete de type
   Select First(nom), First(prenom), First(ville),
   First(telephone)From Client GROUP BY
   First(nom), First(prenom), First(ville),
   First(telephone).
3-Insèrer le résultat dans la table temporaire
4-Vider la table originale
5-Insèrer le contenu de la table temporaire dans l'originale.

L' avantage c' est qu' on peut le faire sans passer par l' interface Access.

<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
26 juin 2008 à 16:03
SELECT [DISTINCT] { * | <nom_de_relation>,<nom_d’attribut> [alias] | <nom_d’attribut>[alias] [, ...]
FROM [<nom_d’utilisateur>]<nom_de_relation> [alias] [, ...]

[WHERE <condition>]
[GROUP BY <nom_d’attribut> [, ...] [HAVING <condition>] ]
[ {UNION | INTERSECT | MINUS [ALL]} <commande_SELECT>
[ ORDER BY {<nom_d’attribut> | <numéro_de_colonne>} [{ASC | DESC}] [, ... ]






<hr size="2" width="100%" />
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
bonjourcheval Messages postés 228 Date d'inscription mercredi 13 décembre 2000 Statut Membre Dernière intervention 8 août 2011
26 juin 2008 à 16:52
En résumé :

SELECT DISTINCT nom, prenom, ville, telephone
FROM Client;
0
chefinf Messages postés 166 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 25 octobre 2011
26 juin 2008 à 17:03
ça donne encore des doublons au niveau du champs telephone

.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
26 juin 2008 à 17:11
avec NOM en premier çà m'étonne pas
0
chefinf Messages postés 166 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 25 octobre 2011
26 juin 2008 à 17:20
C le même résultat aussi si je met le telephone en premier

.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
26 juin 2008 à 17:40
et quand tu tapes ta requête dans la base (moteur) ?
0
chefinf Messages postés 166 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 25 octobre 2011
26 juin 2008 à 17:53
meme resultat.

Est ce que c'est impossible de faire un distinct sur un seul champ?

.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
26 juin 2008 à 18:16
si c'est possible?
pire, çà ne se fait QUE sur un seul champ

pour toi çà donnera :

SELECT nom, prenom, ville, telephone
FROM (SELECT DISTINCT Client.telephone FROM Client WHERE 1 = 1);

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
bonjourcheval Messages postés 228 Date d'inscription mercredi 13 décembre 2000 Statut Membre Dernière intervention 8 août 2011
26 juin 2008 à 18:45
Essaie ça :

Select DISTINCTROW et la suite =)
0
bonjourcheval Messages postés 228 Date d'inscription mercredi 13 décembre 2000 Statut Membre Dernière intervention 8 août 2011
26 juin 2008 à 18:49
Dsl, j'avais mon lu la suite du post !

Je ne crois vrm pas que DISTINCTROW suis la bonne chose  ...

DSL
0
chefinf Messages postés 166 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 25 octobre 2011
26 juin 2008 à 18:57
apres l'execution de ta requete je trouve mon programme en boucle infinie.

Merci pour votre intervention.

.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
26 juin 2008 à 19:58
j'ai testé la requête sur une base access avant de te la copier,

JAMAIS je n'ai vu access (ni aucun moteur BDD sans code TRANSAC) faire de boucle infinie.....

essaye-le dans la DB voir s'il fonctionne, si oui ensuite vérifie ton code

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
27 juin 2008 à 00:56
Salut,

Avec DISTINCTROW, èa donnerait ceci:


SELECT DISTINCT nom, prenom, ville, telephone
From Client;

ça devrait aussi marcher avec :Select nom, prenom, ville, First(telephone)
From Client GROUP BY nom, prenom, ville, telephone;

ça fera l' affaire si le client est bien identifié
par le nom.

First te retoune le premier telephone; à supposer
qu' un client peut en avoir plusieurs.





<hr />


... Y'en a même qui disent qu'ils l'ont vu voler.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 juin 2008 à 01:44
salut,

le DISTINCT (en tout cas chez moi et apparemment chez chefinf) ne fonctionne pas.
même résultat avec DISTINCTROW

testé sous ACCESS 2000 uniquement.
"ne fonctionne pas" = retourne tous les champs (donc sans distinction)

obligé de l'utiliser sur un seul champ (comme l'exemple que j'ai indiqué, en tant que FROM)

pas d'autre base ni moteur testable pour le moment...
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
chefinf Messages postés 166 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 25 octobre 2011
27 juin 2008 à 09:38
J'ai testé votre requête sous Access Mr. PCPT , et il m'affiche le message suivant:

"Erreur de syntaxe dans la clause FROM."

.
0
chefinf Messages postés 166 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 25 octobre 2011
27 juin 2008 à 10:32
J'ai testé votre requête sous Access 2000 une autre fois, Mr. PCPT , mais il me demande d'entrer les valeurs: prenom et  ville, (comme une requête parametrée) au lieu de faire une sélection à partir de la table.

Ce que m'etonne que les numéros de telephone s'affichent sans doublons comme on veut exactement, la colonne Nom contienne: "Microsoft Access"
 et les colonnes Prenom et Ville contiennent les valeurs demandées comme paramètre.

.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 juin 2008 à 10:38
dès que tu refais le test tu as un autre résultat....

si tu ne nous dis la chaine sql que tu exécutes, on ne risque pas de savoir d'où vient le problème....

forcément tu as modifié ma chaine fournie, elle basée sur le nom des champs que tu avais indiqué (qui peuvent aussi être erronés), on ne s'en sortira jamais ^^
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
chefinf Messages postés 166 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 25 octobre 2011
27 juin 2008 à 11:11
Mon problème c obtenir une solution avec une requêtte sql contenant la solution, c'est pas avec Access. Alors j'ai une solution rapide avec acces, la voilà:

La suppression des doublons d'enregistrements d'une table comprend deux étapes. Créez d'abord une copie de la structure de la table qui contient les doublons et faites des clés primaires de tous les champs contenant des doublons. Ensuite, créez et exécutez une requête Ajout de la table d'origine vers la nouvelle table. Comme les champs qui sont des clés primaires ne peuvent pas contenir de doublons, cette procédure génère une table sans doublon.

Pour copier la table et faire des clés primaires des champs contenant des doublons

<ol><li>Sélectionnez la table dans la fenêtre Base de données.
</li><li>Cliquez sur Copier dans la barre d'outils.
</li><li>Cliquez sur Coller dans la barre d'outils.
</li><li>Dans la boîte de dialogue Coller la table sous, tapez un nom pour la table copiée, cliquez sur Structure seulement, puis sur OK.
</li><li>Ouvrez la nouvelle table en mode Création et sélectionnez les champs qui contiennent des doublons.
</li><li>Cliquez sur Clé primaire dans la barre d'outils pour créer une clé primaire en fonction des champs sélectionnés.
</li><li>Enregistrez et fermez la table. </li></ol>Pour ajouter seulement les enregistrements uniques à la nouvelle table

<ol><li>Créez une nouvelle requête en fonction de la table d'origine contenant les doublons.
</li><li>En mode Création de requête, cliquez sur Type de requête dans la barre d'outils, puis sur Requête Ajout.
</li><li>Dans la boîte de dialogue Ajout, cliquez sur le nom de la nouvelle table dans la liste Nom table, puis sur OK.
</li><li>Incluez tous les champs de la table d'origine en faisant glisser l'astérisque (*) dans la grille de création de la requête.
</li><li>Cliquez sur Exécuter dans la barre d'outils.
</li><li>Cliquez sur Oui lorsque vous recevez le message vous indiquant que vous allez ajouter des lignes.
</li><li>Cliquez sur Oui lorsque vous recevez le message indiquant que Microsoft Access ne peut pas ajouter tous les enregistrements dans la requête Ajout. Cette opération transfère seulement des enregistrements uniques vers votre nouvelle table et supprime les doublons. </li></ol>Ouvrez la table pour voir les résultats. Lorsque vous êtes certain que la nouvelle table contient les enregistrements uniques corrects, vous pouvez supprimer la table d'origine et attribuer à la nouvelle table le nom de la table d'origine.

.
0
bonjourcheval Messages postés 228 Date d'inscription mercredi 13 décembre 2000 Statut Membre Dernière intervention 8 août 2011
2 juil. 2008 à 21:53
Et mais, ça ressemblerais pas à un devoir ça?
*Je sais, aucun lien avec le sujet mais bon, tout le monde se pose des questions xD
0
Rejoignez-nous