Probleme avec bd access et listbox

[Résolu]
Signaler
Messages postés
5
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
19 septembre 2006
-
Messages postés
5
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
19 septembre 2006
-
Salut, j'ai un probleme avec un programme qui sert a la gestion de cles. Je remplis un listbox a partir d'une bd access avec une conection ado. Lorsqu'un usager doit retourner une cle, il clique sur la cle dans la liste et les infos sur le pret s'affichent dans differents champs avant de la retourner. Tout fonctionne tres bien a l'exception que certaine cles sont en plusieurs exemplaires dans la base donc si j'ai plusieurs cles du meme nom dans la liste et que je clic, ma recherche s'arrete au premier enregistrement trouve et si je change sur une cle du meme nom les infos restent les memes. Je debute et le sql n'est pas encore tres fort de mon cote alors si quelqu'un peut m'aider j'apprecierais beaucoup.

Voici ma requete dans le clic du listbox :

"SELECT * FROM tblPret WHERE IsNull(Retour_Date) and Cles_Pretees LIKE '" & txtPret.text & "'"

Sur le clic dans le listbox, txtPret.text capte le text du listbox.

C'est difficile a expliquer comme ca, mais en gros je voudrais pouvoir me promener entre les enregistrements meme si il y a exemple 2 cles du meme nom qui sont pretees a 2 personnes differentes.

exemple des champs de tblPret
ID /clepretee/PreteePar/PreteeA/PreteePour//PretDate/PretHeure/RetourDate/RetourHeure/RetourPar
et les donnees
49/ coffre-fort / bibi / bobo / raison / date / heure / date retour / date retour heure /retournee par
50/ coffre-fort / tata / toto / autre raison / heure / etc ...

Donc dans le listbox j'ai  coffre-fort 2 fois et je veux recuperer les infos differentes en cliquant sur une ou l'autre. Est-ce faisable ou avant tout, est-ce assez clair ? Si quelqu'un peut eclairer un pauvre debutant svp merci.

michmar007

6 réponses

Messages postés
5
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
19 septembre 2006

Woooo enfin ça fonctionne !!!!

En fait j'avais le meme message d'erreur et j'ai changé cstr(txtPret.ItemData(txtPret.ListIndex)) pour
cstr(lstPret.ItemData(lstPret.ListIndex)) et avec le reste du code que tu m'a envoyé tout est excellent.

Un très très gros merci et bonne journée.
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Je crois avoir compris. En fait tu dois accéder à la table non pas par la clé mais par l'identifiant. Tu peut utiliser la propriété ItemData de ton ListBox pour stocker l'ID de tblPret au momment du chargement du ListBox. Ensuite lorsque l'usager clique sur la clé, tu fait ta requette en utilisant la propriété ItemData de l'item sélectionné, de cette façon:

"SELECT * FROM tblPret WHERE IsNull(Retour_Date) and ID = " & cstr(txtPret.ItemData(txtPret.ListIndex))
Messages postés
5
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
19 septembre 2006

Malheureusement, ça ne fonctionne pas il me donne un message d'erreur "Method or data member not found " ...
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

Est-ce que cette erreur arrive au moment du chargement du ListBox ? Là  il faudrait que tu m'envoie le code incriminé pour que je puisse me faire une opinion.
Messages postés
5
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
19 septembre 2006

Au niveau du remplissage ca va, j'ajoute au listbox lstPret toutes les clés qui n'ont pas de date de retour, elles s'affichent. Dans mon cas comme exemple, il y en a 4 dont 2 du même nom mais prêtées à deux personnes différentes.

je remplis mon listbox en demandant d'afficher tout :

**************************************************************
set rslog = new adodb.recordset

with rslog
.Active connection = conectString
.CursorLocation = adUseClient
.CursorType= adOpenForwardOnly
.Source = "SELECT * FROM tblPret WHERE isNull(Retour_Date)"

if Not isNull(.fields("Cles_Pretees") Then
Do While Not rslog.E.O.F.
lstPret.Additem.Fields("Cles_Pretees")
rslog.MoveNext
Loop
.Close
end if


        end with
**************************************************************
Avec ça mon lstPret est rempli avec les clés prêtées. Maintenant je dois arriver à signaler au clic du listbox d'aller chercher le Champs ID pour identifier chaque clé comme tu me suggérais. J'étais sûr que ta méthode fonctionnerait mais quand je clique sur une des clés dans le listbox c'est là que le message apparait. Si je met ton code, cstr(txtPret.ItemData(txtPret.ListIndex)) soit dans mon bouton de remplissage(Retourner une clé) ou dans le clic du lisbox, le cursor plante sur .Item j'imagine que c'est parce que ce n'est pas une propriété du txtbox ... J'ai fait quelques tests et le listIndex ne me donne que le numero d'enregistrement où est placée la clé que je sélectionne alors si j'arrivais à sortir les données de la tables situées sur cette ligne d'enregistrements je pourrais récupérer l'ID mais je ne sais pas comment m'y prendre il ne manque pas grand chose je suis sûr mais mes connaissances sont limitées alors si jamais tu as une idée stp
Merci
michmar007
Messages postés
69
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
3 octobre 2006

En fait j'aurais dû te dire ça au début. Il faut que tu renseigne l'ItemData au chargement de la façon suivante:

lstPret.Additem .Fields("Cles_Pretees")
lstPret.ItemData(lstPret.NewIndex) = .Fields("ID")

Et je pense que cela marchera mieux aprés.