Selection par initiale dans un Recordset ADO

tit_pierre Messages postés 6 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 13 mai 2006 - 10 mai 2006 à 22:57
tit_pierre Messages postés 6 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 13 mai 2006 - 13 mai 2006 à 20:21
bonjour a tous!
je vous explique sommairement mon probleme, auquel j'espere que vous trouverez une solution parce que j'ai eu beau me renseigner un peu partout, j'ai rien trouvé!
En fait, je cherche a faire un repertoire téléphonique en VB6. Mes données sont stockées dans une base access. Pour info, j'ai testé avec un version 97 et une 2002. A un moment de l'application, l'utilisateur doit pouvoir visionner les contacts de la base de données. Pour ca j'utilise donc un recordset qui associé à une requete SQL doit stocker toutes les informations des contacts. Sachant que la liste des contacts s'affiche dans une Listbox, elle-même contenue dans un TabStrip, je voudrais trier mes contacts par initiale en cliquant sur les onglets du TabStrip. Sauf que c'est la qu'arrive mon probleme. Sous Access, la requete permettant de le faire serait:
Select * from Repertoire (table de la base) where Nom="A*"
Mis en VB ca donnerait:
recordset.Open "Select * from Repertoire where [Nom]='A*'" en remplacant eventuellement le = par un LIKE ou bien l'etoile * par un %.
Sauf que dans tous les cas ennoncés si dessus, la requete ne retourne aucun résultat!! J'ai pensé a faire passer les resultats sans conditions du Recordset dans des ListBox sur une feuille a part non visible sauf que je ne sais pas comment les trier par initiale apres...
J'espere avoir été assez clair sur le probleme posé, en cas de questions eventuelles ou de suggestions n'hesitez pas, je suis pret a tout essayer afin que mon programme fonctionne correctement... Surtout que c'est la seule chose qui ne fonctionne pas!!
Merci d'avance a tous pour votre aide!!
P'tit Pierre

6 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
10 mai 2006 à 23:27
Salut
La bonne syntaxe est :
"Select * from Repertoire where Nom Like 'A%'"
Je ne vois pas d'où vient le problème avec cette simple ligne en guise de source de problème.
Les crochets [ et ] ne sont pas nécessaire puisque le nom de ton champ ne comporte de caractères spéciaux (accents, espace ...), mais le mettre ne gène pas.
Le problème vient surement d'ailleurs.
Comment analyses-tu les résultats ?
Si ta ListeBox est placé sur le ssTab, il devrait donc y avoir autant de ListBox que d'onglet ?
Comment fais-tu le transfert de ton RecordSet vers ta ListBox ?
Comment sais tu qu'il n'y a pas de résultats à ta requète ?
Là, je commence à manquer d'idée ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
tit_pierre Messages postés 6 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 13 mai 2006
11 mai 2006 à 00:07
Comment analyses-tu les résultats ?
Je ne les analyse pas, je veux juste les trier par initiale en intégrant une condition a ma requete SQL
Si ta ListeBox est placé sur le ssTab, il devrait donc y avoir autant de ListBox que d'onglet ?
Non pas besoin. A chaque fois que l'utilisateur clique sur un onglet voila le deroulement des evenements:
1. ouverture du recordset
2. selection des resultats en fonction de l'onglet (et donc de l'initiale) par la requete SQL
3. effacement de la listbox avec la méthode Clear
4. ajout des données contenues dans le recordset dans la listbox avec la méthode Additem
5. fermeture du recordset.
A la fin de tout ca, ma listbox affiche les resultats de la requete en fonction de l'onglet!
Comment fais-tu le transfert de ton RecordSet vers ta ListBox ?
Voila le code, ca sera surement plus explicite: (supposons que j'ai deja rempli mon recordset avec les données voulues...)

While Not recordset.EOF 'Tant que le curseur n'est pas a la fin de l'enregistrement

List1.AddItem(recordset("Nom") & " " & recordset("Prenom")) 'Ajout des données des colonnes Nom et Prenom de la table de la base
recordset.MoveNext
Wend

En sachant qu'il est possible de mettre l'index de chaque colonne de la table à la place de leur nom!
Comment sais tu qu'il n'y a pas de résultats à ta requète ?
Tout simplment parce qu'aucun résultat ne s'affiche dans ma ListBox. J'ai fait le test en remplacant mes conditions Nom="A*" par un nom en entier et dans ce cas, l'affichage se faisait correctement.

J'espère m'etre fait comprendre et je te remercie de passer un pe de tps sur mon probleme

P'tit Pierre
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 mai 2006 à 05:13
Re
J'insiste : la syntaxe que je t'ai donné est la seule qui fonctionne sous VB6.
As-tu des "On Error Resume Next" en tête de tes procédures ?
Si oui, vire les : VB te fournira les erreurs et des indices sur le problème
Ta connexion à la DB est correcte ?

Sans plus de détail sur ton code, difficile de deviner le problème ...
tit_pierre Messages postés 6 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 13 mai 2006
13 mai 2006 à 09:29
Si jamais tu veux voir mon code, pas de pb je t'envoie ca. Mais expliquer ca par des mots, jpe pas faire mieux... Quand à la connexion a la BD, oui elle est directe et fonctionne bien puisque j'utilise d'autres Recordset pour d'autres requetes et que celles si fonctionnent!!
A bientot!
P'tit Pierre

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

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 mai 2006 à 16:47
En passant
Il est très maladroit, voire dangereux d'appeler des object par des mots clés :
RecordSet est un mot clé
Utilise plutôt une syntaxe du genre rsNoms sans ambigüité
tit_pierre Messages postés 6 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 13 mai 2006
13 mai 2006 à 20:21
j'ai mis ca juste pour montrer que c'etait le recordset a cet endroit, dans mon code j'utilise evidement un autre nom...
Rejoignez-nous