RE: Problème de ligne de requête avec base access

Résolu
sancho12345
Messages postés
131
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
18 mars 2012
- 28 juin 2009 à 15:28
sancho12345
Messages postés
131
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
18 mars 2012
- 28 juin 2009 à 17:03
Bonjour à tous,



Encore merci à PCPT pour sa réponse d’hier mais en regardant bien  cela ne fonctionne  pas à moins que cela ne vienne de moi, c’est tout à fait possible.
Une petite question qui j'espère sera  pour vous  simple ( Aucun doute)<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>


Voici mon code qui fonctionne bien avec ma base access.


************************************************


Private Sub txt_nom_produit_Change()      ' requête qui permet d'afficher en fonction de la première lettre les produits commençant par cette lettre



sql_tout_les_noms = "select * from tempsetnoms WHERE reference_pdt LIKE '" & txt_nom_produit & "%' order by reference_pdt "







  Call recherchetempsetnoms(sql_tout_les_noms)


End Sub





********************************************
Function recherchetempsetnoms(requete_sql As String)





On Error Resume Next





 




'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


' connexion à la base de données



'objet de connexion





Set cnx = New ADODB.Connection





Set rst = New ADODB.Recordset




'Définition du pilote de connexion


cnx.Provider = "Microsoft.Jet.Oledb.4.0"


'Définition de la chaîne de connexion


cnx.ConnectionString = "baseproduits.mdb"


'Ouverture de la base de données



cnx.Open





 





rst.Open requete_sql, cnx




'affichage des enregistrements



i = 0





 





If rst.EOF = True Then




MsgBox " Il n'y a aucun produit dans la base ACCESS, portant cette référence. Vous devez mettre la base à jour. Dans la base Access nommée baseproduits, la table porte le nom Tempsetnoms.", vbOKOnly + vbInformation, "Erreur"""


 



Else





form_ajout_produit.ListBox1.Clear





rst.MoveFirst





 





While Not (rst.EOF)




form_ajout_produit.ListBox1.AddItem rst("reference_pdt")                       form_ajout_produit.ListBox1.List(i, 1) rst("noms_pdt")                                              quantite" colonne 2 de la base



form_ajout_produit.Text1 = rst("duree_pdt")              





rst.MoveNext





 





Wend





 





End If





rst.Close





 





End Function




 



 




***********************************************


Voilà ma question: Comment puis-je faire en modifiant ma requête pour que lorsque je rencontre un - ( du 6) tout ce qui est au delà ne soit pas prit en compte par la recherche mais continu  à écrire dans txt_nom_produit. 



: je veux écrire dans mon txt_nom_produit toutou.bien-820toutou.bien- il faudrait à partir de - que la recherche ne fonctionne plus.


J'espère que j'ai été clair.


 


Mais lorsque je tape un nom(ex : toutou.bien-1  ) mais que dans ma base Access seul le nom toutou.bien-820  y figure il ne dit :




 Il n'y a aucun produit dans la base ACCESS, portant cette référence. Vous devez mettre la base à jour. Dans la base Access nommée baseproduits, la table porte le nom Tempsetnoms.



Comment ne plus tenir compte des chiffres ou des lettres après le -, tout en continuant d’écrire dans le

txt_nom_produit





sans tenir compte a ce moment là de la base. Par contre si on revint en arrière dans le

txt_nom_produit

on recolle à la base.




Merci bien


 

4 réponses

PCPT
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
3 février 2018
49
28 juin 2009 à 16:47
ce que j'en pense?

je ne vois pas du tout pourquoi tu as modifié mon code






tu modifies la saisie utilisateur, ce dans l'évènement _CHANGE de la textbox, ce qui va re-déclencher le _CHANGE


normal que çà bugg donc
3
PCPT
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
3 février 2018
49
28 juin 2009 à 16:09
... en MP tu me parles de "?", c'est "%"
"?" = joker (1 caractère)
"%" = un ou plusieurs caractères

et tu n'as pas appliqué mon code apparemment, donc logique que çà ne marche pas

donc : même réponse qu'hier
http://www.vbfrance.com/forum/sujet-PROBLEME-LIGNE-REQUETE-AVEC-BASE-ACCESS_1331532.aspx


<hr size ="2" width="100%" />
0
sancho12345
Messages postés
131
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
18 mars 2012

28 juin 2009 à 16:23
Désolé ,



effectivement j’ai fait un copier coller d’hier mais voilà ce que j’ai dans mon programme.<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>





***************************************************************





 
Private Function getSqlLike(ByVal sText As String, Optional bFirst As Boolean = False) As String






    Dim iPos As Integer






   






'   cherche le - et nettoie si trouvé



    iPos = InStr(1, txt_nom_produit, "-")



  
' If iPos Then txt_nom_produit = Left$(txt_nom_produit, iPos)         ' si activé marche bien





 




'   première ou toutes les lettres



  
If bFirst Then txt_nom_produit = Left$(txt_nom_produit, 1)





 




'   renvoie avec %



   
getSqlLike = txt_nom_produit & "%"





End Function





 





***********************************************





 




Private Sub txt_nom_produit_Change()


 


' requete qui permet d'afficher en fonction de la premiere lettre les produits commençant par cette lettre



sql_tout_les_noms = "SELECT * FROM tempsetnoms WHERE reference_pdt LIKE '" & getSqlLike(txt_nom_produit.Text, False) & "' ORDER BY reference_pdt;"





'il faut passer de  false à true si on veut que la première lettre




 



  Call recherchetempsetnoms(sql_tout_les_noms)


 


End Sub




 





 





Function recherchetempsetnoms(requete_sql As String)





On Error Resume Next





 




'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


' connexion à la base de données



'objet de connexion





Set cnx = New ADODB.Connection





Set rst = New ADODB.Recordset




'Définition du pilote de connexion


cnx.Provider = "Microsoft.Jet.Oledb.4.0"


'Définition de la chaîne de connexion


cnx.ConnectionString = "baseproduits.mdb"


'Ouverture de la base de données



cnx.Open





 





rst.Open requete_sql, cnx




'affichage des enregistrements


i = 0


 



If rst.EOF = True Then




MsgBox " Il n'y a aucun produit dans la base ACCESS, portant cette référence. Vous devez mettre la base à jour. Dans la base Access nommée baseproduits, la table porte le nom Tempsetnoms.", vbOKOnly + vbInformation, "Erreur"""


 



Else





form_ajout_produit.ListBox1.Clear





rst.MoveFirst





 





While Not (rst.EOF)




form_ajout_produit.ListBox1.AddItem rst("reference_pdt")                       form_ajout_produit.ListBox1.List(i, 1) rst("noms_pdt")                                              quantite" colonne 2 de la base



form_ajout_produit.Text1 = rst("duree_pdt")              





rst.MoveNext





 





Wend





 





End If





rst.Close





 





End Function





 *********************************************************




Mais cela ne marche pas, sûrement un oubli de ma part.


 


Qu’en penses-tu ?


 


Merci


 
0
sancho12345
Messages postés
131
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
18 mars 2012

28 juin 2009 à 17:03
Ecoute je suis confus, effectivement en remettant le premier code que tu m’avais donné et surtout sans le modifier, cela marche très bien.


 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>


Encore désolé.


 


Un grand merci à toi.


 


A+
0