Mon Select Distinct ne marche pas! [Résolu]

js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 13 sept. 2009 à 16:43 - Dernière réponse : js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention
- 17 sept. 2009 à 15:01
Bonjour à tous,

j'ai deux tables :

tableformation(idformation,numformation,dateformation,intituleformation,numapprenant)
tableapprenant(numapprenant,nomapprenant)

En supposant que je pour la formation numéro FOR012-09 j'ai 5 apprenants voici ce que j'aurai dans ma table tableformation :

1, FOR012-09 , 09/09/09, VB, 1
2, FOR012-09 , 09/09/09, VB, 6
3, FOR012-09 , 09/09/09, VB, 3
4, FOR012-09 , 09/09/09, VB, 9
5, FOR012-09 , 09/09/09, VB, 10

Pour éviter l'affichage des doublons (de numformation) dans mon flexgrid je fais :

Dim rsformation As New Recordset
rsformation.Open "select distinct numformation from Tableformation order by (numformation) ", cn, 1, 2

mais il ne m'affiche rien. Mais si je fais

Dim rsformation As New Recordset
rsformation.Open "select * from Tableformation order by (numformation) ", cn, 1, 2


Là il m'affiche tout avec les doublons.

Quelqu'un pourrait-il m'aider s'il vous plaît?

Merci d'avance.

Cordialement.
Afficher la suite 

Votre réponse

23 réponses

Meilleure réponse
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 16 sept. 2009 à 08:45
3
Merci
je viens de regarder le zip :

SELECT DISTINCT nummission FROM TableTempMission ORDER BY nummission;

db.RS.RecordCount me retourne bien 2 (sur les 3 en table)

ps : le nom de famille dans les tables, sur le net çà fait pas très sécuritaire...
(tu aurais du mettre des noms fictifs, nom1 nom2 etc)

bref dans ces conditions le DISTINC fonctionne bien
essaye dans l'éditeur de requête d'access avant de mettre le code en pratique

++

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de PCPT
Meilleure réponse
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 16 sept. 2009 à 21:31
3
Merci
il y a 15 champs (pas 14)

access 2003 je ne sais plus, pas dispo

sous access 2007 :

[i]onglet créer > frame autre > création de requête > (fenêtre d'assistant) bouton fermer
frame résultats > affichage > mode SQL

SELECT DISTINCT nummission, * FROM TableTempMission ORDER BY nummission;

frame résultats > executer/i

PS (je ne l'avais pas précisé mais bon) => niveau code, préfère toujours les constantes !
tu l'as bien fait pour PRESQUE toutes tes requêtes (.OPEN), le premier est encore à 2,3 (à remplacer par adOpenDynamic, adLockOptimistic )

++

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de PCPT
Meilleure réponse
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 16 sept. 2009 à 22:20
3
Merci
en fait ma réponse n'est pas tout à fait exacte....
(pour ne pas dire fausse )

le distinct ne permet pas d'afficher plusieurs champs différents (en conservant le filtre unique)

en SQL on ferait un IN (SELECT ...), or le IN n'est pas supporté par access

si tu as la possibilité (droits, diffusion de la base) de modifier la base, il faudrait y enregistrer le requête DISTINCT, et faire ta requête SELECT where table.nummission = requete.nummission, ou quelque chose du genre

pose éventuellement aussi ta question sur SQLFR.COM, ta question concerne plus le SQL que le VB...

++

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de PCPT
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 13 sept. 2009 à 16:46
0
Merci
J'utilise VB 6.0 et Access 2003. Merci d'avance.
Commenter la réponse de js8bleu
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 13 sept. 2009 à 17:09
0
Merci
salut,

et si tu supprimes le order by ?
[hr]
Commenter la réponse de PCPT
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 13 sept. 2009 à 19:37
0
Merci
Bonjour et Merci PCPT pour ton intervention. C'est la même chose même si je supprime le order by.
Commenter la réponse de js8bleu
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 13 sept. 2009 à 20:22
0
Merci
depuis access 2007, j'ai reproduit uniquement ta table tableformation (sans clé étrangère donc)

table enregistrée au format access 2002-2003

nouveau projet, références ADO 2.8 et ADOX 2.8

une classe clsdb contenant ce code :
http://www.codyx.org/snippet_connexion-base-donnees-access_107.aspx#1907


code de ma form1 :

Option Explicit

Private Sub Form_Load()
    Dim db As New clsdb
    db.DBConnect "c:\tmp2003.mdb", , Jet4x
    
    db.RSExecute "SELECT * FROM tableformation ORDER BY numformation;"
    MsgBox "nombre d'enregistrements = " & db.RS.Fields.Count
    
    db.RSExecute "SELECT DISTINCT numformation FROM tableformation ORDER BY numformation;"
    MsgBox "nombre d'enregistrements = " & db.RS.Fields.Count
    
    db.DBClose
    Set db = Nothing
    
    Unload Me
End Sub



j'ai bien 5 puis 1

seules différences :
-table sans majuscule
-requêtes terminées par ;
-paramètres RS = 2,3 (adOpenDynamic, adLockOptimistic) et non 1,2
-pas de clé étrangère
-pas de parenthèses


dans le tas, la seule chose qui me semble pouvoir jouer est donc :
rsformation.Open "select distinct numformation from Tableformation order by (numformation)", cn, 2, 3


[hr]
Commenter la réponse de PCPT
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 13 sept. 2009 à 20:56
0
Merci
ça ne marche toujours pas. Je n'y comprends vraiment rien. Pourtant, je ne crée pas de lien entre mes tables dans access. J'ai testé avec 2, 3 et avec et sans le order by mais rien n'y fait. Ce n'est pas du tout logique. Même

Dim rsformation As New Recordset
rsformation.Open "select numformation from Tableformation ", cn, 2, 3


ne marche pas.
Commenter la réponse de js8bleu
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 13 sept. 2009 à 21:52
0
Merci
essaye avec la classe + lien ci-dessus stp
(voir si çà vient d'une partie de ton code, ou de ta base...)
Commenter la réponse de PCPT
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 13 sept. 2009 à 23:22
0
Merci
Le problème est que j'ai d'autres formulaires et pourtant ça marche très bien. Y a-t-il un endroit où je pourrai envoyer mon appli svp? Merci d'avance.

Cordialement.
Commenter la réponse de js8bleu
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 13 sept. 2009 à 23:47
0
Merci
çà serait bien que tu testes avant de nous demander de tester

nouveau projet, classe, etc...
(comme j'ai fait pour te répondre )
Commenter la réponse de PCPT
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 14 sept. 2009 à 00:46
0
Merci
Je vous prie de bien vouloir m'excuser. Dans ma BD j'ai 5 enregistrements concernant deux formations différentes. 2 enregistrements concernant la 1ère formation et 3 enregistrements concernant la 2ème formation. Mais lorsque j'exécute votre code au lieu de m'afficher 5 il m'affiche 15 pour le premier code et concernant le deuxième code au lieu de m'afficher 2 il m'affiche 1. C'est à devenir fou. Je n'y comprends plus rien. Aidez-moi s'il vous plaît. Merci d'avance.
Commenter la réponse de js8bleu
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 14 sept. 2009 à 01:20
0
Merci
j'ai repris ton exemple avec tes informations

si elles ne sont pas bonnes (l'énoncé donc) çà ne va pas nous aider

héberge ta base sur www.cijoint.fr et donne le lien, je referai le test (que je n'ai pas sauvé bien sûr )
Commenter la réponse de PCPT
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 14 sept. 2009 à 02:24
0
Merci
malheureusement l'extension .mdb n'est pas accepté. Comment faire?
Commenter la réponse de js8bleu
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 14 sept. 2009 à 02:47
0
Merci
...

appelle ce numéro
[i]Service Client Corel
0805 639 920 (numéro gratuit)/i
c'est l'éditeur de winzip

demande s'ils peuvent envoyer un technicien chez toi pour compresser ton fichier

(poser une question sur un forum n'implique pas de ne plus rien faire une fois le bouton "envoyer" pressé!!)
Commenter la réponse de PCPT
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 16 sept. 2009 à 02:05
0
Merci
Re-Bonjour,

je suis désolé pour le silence mais j'avais tellement réfléchis (sans malheureusement trouver de solution) que j'avais super mal à la tête. Voici donc le lien de ma BD : http://www.cijoint.fr/cjlink.php?file=cj200909/cijuB8mViM.zip.. La table à problème s'appelle TableTempMission. Je suis désolé d'avoir menti mais comme il s'agit d'une application que je dois développer pour mon job j'avais peur de donner les bonnes infos. Croyez-moi j'en suis vraiment désolé . Rappel: J'ai plusieurs enregistrements avec le même numéro de mission (nummission) mais avec des idmission différents et j'aimerai juste en afficher un au lieu de tous les enregistrements. Merci d'avance pour votre aide.

Cordialement.
Commenter la réponse de js8bleu
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 16 sept. 2009 à 18:18
0
Merci
Bonjour PCPT et Merci du fond du coeur pour ton aide. Tu m'as vraiment ouvert les yeux. Je ne sais malheureusement pas utiliser les requêtes sous access mais comptes sur moi pour maîtriser ça. En effet ça marche comme tu l'as souligné. Malheureusement, ma requête était fausse par rapport à ce que je voulais avoir comme résultat. Comme tu l'as constaté, tabletempmission a 14 champs. J'aimerai donc afficher tous les 14 champs mais en évitant les doublons de nummission. Est-ce que tu vois un peu s'il te plaît? J'ai essayé cette requête mais elle ne marche malheureusement pas :


Dim rsmission As New Recordset
rsmission.Open "select * from (select distinct nummission from Tabletempmission)", cn, 2, 3


celle-là non plus :

Dim rsmission As New Recordset
rsmission.Open "select * from tabletempmission where nummission = (select distinct nummission from Tabletempmission)", cn, 2, 3


Merci d'avance pour ton aide.

Cordialement.
Commenter la réponse de js8bleu
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 16 sept. 2009 à 18:35
0
Merci
En fait la dernière requête ne marche que pour le 1er nummission. Mais pour ce qui est des autres nummission ça ne marche pas. Il ne m'affiche que le premier nummission.
Commenter la réponse de js8bleu
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 16 sept. 2009 à 19:01
0
Merci
Voici mon code complet :

Dim rsmission As New Recordset
rsmission.Open "select * from tabletempmission where nummission = (select distinct nummission from Tabletempmission)", cn, 2, 3

Dim rs2 As New Recordset

Dim rs3 As New Recordset

Dim rs4 As New Recordset

Dim rs5 As New Recordset

i = 1

While (Not rsmission.EOF)
If Not IsNull(rsmission) Then

rs3.Open "select tableimputation.imputation from tableimputation, tabletempmission where tabletempmission.numimputation tableimputation.numimputation and idmission " & rsmission(0) & "", cn, adOpenDynamic, adLockOptimistic

rs4.Open "select tablechauffeur.nomprenomchauffeur from tablechauffeur, tabletempmission where tabletempmission.numchauffeur tablechauffeur.numchauffeur and idmission " & rsmission(0) & "", cn, adOpenDynamic, adLockOptimistic

rs5.Open "select tablevehicule.vehicule from tablevehicule, tabletempmission where tabletempmission.numvehicule tablevehicule.numvehicule and idmission " & rsmission(0) & "", cn, adOpenDynamic, adLockOptimistic

If IsNull(rsmission(1)) Then
msfmission.TextMatrix(i, 0) = ""
Else
msfmission.TextMatrix(i, 0) = rsmission(1)
End If
If IsNull(rsmission(0)) Then
msfmission.TextMatrix(i, 1) = ""
Else
msfmission.TextMatrix(i, 1) = rsmission(0)
End If
..................................................................
.................................................................

If IsNull(rs2(0)) Then
msfmission.TextMatrix(i, 14) = ""
Else
msfmission.TextMatrix(i, 14) = rs2(0)
End If

End If

i = i + 1
rsmission.MoveNext


Wend

msfmission.Refresh

rsmission.Close

Set rsmission = Nothing
Set rs2 = Nothing
Set rs3 = Nothing
Set rs4 = Nothing
Set rs5 = Nothing


msfmission_Click
Commenter la réponse de js8bleu
js8bleu 576 Messages postés samedi 14 octobre 2006Date d'inscription 27 janvier 2014 Dernière intervention - 16 sept. 2009 à 22:14
0
Merci
Tout simplement FABULEUX . Je te remercie du fond du coeur pour tout. Tes remarques, tes critiques, tes conseils et ton aide. MERCI, MERCI, MERCI. Passe une excellente soirée et prends bien soin de toi.

Cordialement.
Commenter la réponse de js8bleu

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.