DISTINCT dans une requete SQL pour un code VB6 [Résolu]

chefinf 166 Messages postés mardi 3 juin 2008Date d'inscription 25 octobre 2011 Dernière intervention - 26 juin 2008 à 15:35 - Dernière réponse : LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention
- 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.
 

.
Afficher la suite 

Votre réponse

20 réponses

Meilleure réponse
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 2 juil. 2008 à 22:10
3
Merci
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.

Merci LIBRE_MAX 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de LIBRE_MAX
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 26 juin 2008 à 16:03
0
Merci
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
Commenter la réponse de PCPT
bonjourcheval 228 Messages postés mercredi 13 décembre 2000Date d'inscription 8 août 2011 Dernière intervention - 26 juin 2008 à 16:52
0
Merci
En résumé :

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

.
Commenter la réponse de chefinf
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 26 juin 2008 à 17:11
0
Merci
avec NOM en premier çà m'étonne pas
Commenter la réponse de PCPT
chefinf 166 Messages postés mardi 3 juin 2008Date d'inscription 25 octobre 2011 Dernière intervention - 26 juin 2008 à 17:20
0
Merci
C le même résultat aussi si je met le telephone en premier

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

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

.
Commenter la réponse de chefinf
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 26 juin 2008 à 18:16
0
Merci
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
Commenter la réponse de PCPT
bonjourcheval 228 Messages postés mercredi 13 décembre 2000Date d'inscription 8 août 2011 Dernière intervention - 26 juin 2008 à 18:45
0
Merci
Essaie ça :

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

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

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

Merci pour votre intervention.

.
Commenter la réponse de chefinf
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 26 juin 2008 à 19:58
0
Merci
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
Commenter la réponse de PCPT
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 27 juin 2008 à 00:56
0
Merci
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.
Commenter la réponse de LIBRE_MAX
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 27 juin 2008 à 01:44
0
Merci
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
Commenter la réponse de PCPT
chefinf 166 Messages postés mardi 3 juin 2008Date d'inscription 25 octobre 2011 Dernière intervention - 27 juin 2008 à 09:38
0
Merci
J'ai testé votre requête sous Access Mr. PCPT , et il m'affiche le message suivant:

"Erreur de syntaxe dans la clause FROM."

.
Commenter la réponse de chefinf
chefinf 166 Messages postés mardi 3 juin 2008Date d'inscription 25 octobre 2011 Dernière intervention - 27 juin 2008 à 10:32
0
Merci
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.

.
Commenter la réponse de chefinf
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 27 juin 2008 à 10:38
0
Merci
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
Commenter la réponse de PCPT
chefinf 166 Messages postés mardi 3 juin 2008Date d'inscription 25 octobre 2011 Dernière intervention - 27 juin 2008 à 11:11
0
Merci
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.

.
Commenter la réponse de chefinf
bonjourcheval 228 Messages postés mercredi 13 décembre 2000Date d'inscription 8 août 2011 Dernière intervention - 2 juil. 2008 à 21:53
0
Merci
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
Commenter la réponse de bonjourcheval

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.