Question technique sur une comparaison de chaine en VBA [Access] - VB/VBA/VBS - Programmation
Marsh Posté le 28-11-2002 à 20:07:47
via une requete sql?
Marsh Posté le 28-11-2002 à 21:07:03
ban je sais pas, j'y arrives pas.
a la base, j'ia en 1er lieu utilisé l'assistant de création de boutons et bètement utilisé la fonction "recherche" proposée par Access.
mais cela ne me convient pas, il y a trop de champpossibles, et pout l'utilisateur, je souhaite faire un truc simple.
Ensuite j'ai essayé de passer par des requetes, mais c'est toujours parail, si on utilise un critere de comparaison, ça ne va pas, car il ne va pas comprendre qu'il faut chercher une chaine de caractere parmis le contenu d'une table.
alors je suis passé par du code.
Voilà en gros ce que j'ai marqué, mais non finaloisé, uniquement pour tester voir si ça marche :
Dim db As Database
Dim chNomRecherche As String
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("Select * from client" )
If Me![texte_recherche].Value = "nom a rechercher" Then
MsgBox "Vous devez saisir un nom avant de rechercher"
Else
chNomRecherche = Me![texte_recherche].Value
End If
rs.MoveFirst
While rs.EOF = False
If chNomRecherche Like rs![client_nom_societe] = True Then
MsgBox "Trouvé !"
End If
rs.MoveNext
Wend
rs.Close
Set db = Nothing
C'est la phrase en gras qui ne va pas.
Le like est considéré comme un "=".
J'ai vu qu'il y a une fonction CHERCHE, mais je n'arrive pas a la faire fonctionner en récuprérant directement en tant que criteres de la fonction la valeur du "textbox" du formulaire et lui indiquer directeùent qu'il faut chercher dans le recordset.
Marsh Posté le 28-11-2002 à 21:33:02
regarde plutot pour envoyer une requete sql sur la base
Marsh Posté le 28-11-2002 à 21:34:48
je veux bien, mais comment tu indiques a la requete SQL qu'elle ne doit extraire uniquement les elements de la table qui comportent une certaine chaine de caractere
Marsh Posté le 28-11-2002 à 21:45:40
Code :
|
Marsh Posté le 28-11-2002 à 21:58:26
C'est vraiment gentil, mais la requete ne marche pas, la syntaxe est bnne, mais même avec la saisie d'un element qu iexiste, ya rien qui sort
Marsh Posté le 29-11-2002 à 09:15:08
t'as vérifié si c'était pas une question de majuscules/minuscules? c'est quoi le type de ton champ (enfin c'est vrai qu'en access ça ne devrait pas arriver - en principe -
sinon je vois pas.
Marsh Posté le 29-11-2002 à 09:22:39
wolf019 a écrit a écrit : If chNomRecherche Like rs![client_nom_societe] = True Then C'est la phrase en gras qui ne va pas. Le like est considéré comme un "=". |
NON. Tu testes une chaine de caractère sur un booléan (true); C'est normal que ça ne marche pas.
Normalement, ce que t'a montré Bendes doit marcher; Tu dois concaténer ta valeur recherchée avec un * de chaque côté. Vérifies en lancant une requête avec ton champ et dans la requête tu indiques comme *entrepot*; Tu vas voir qu'ACCESS te donne les enregistrements choisis. Après à toi de changer ton code pour qu'il fonctionne.
Bonne chance
Cyrille, qui a corrigé ses fautes
PS: Like et COMME sont le même opérateur pour ACCESS
Marsh Posté le 29-11-2002 à 09:28:23
wolf019 a écrit a écrit : C'est vraiment gentil, mais la requete ne marche pas, la syntaxe est bnne, mais même avec la saisie d'un element qu iexiste, ya rien qui sort |
La requête de bendes fonctionne uniquement si tu as un champ Me![texte_recherche] dans ton formulaire.
De plus, si je me souviens bien (?), tu dois soit exécuter la requête, puis appliquer le filtre (pour avoir les données), soit .... (je me souviens plus).
Marsh Posté le 29-11-2002 à 09:32:47
ben on doit pouvoir lancer toute la requête d'un coup sauf si c'est un comportement spécifique à Access.
Marsh Posté le 29-11-2002 à 09:47:22
effectivement, j'ai changé dans la requete
*" & Me![texte_recherche].Value & "
par une valeur, cela fonctionne impeccable.
Ce que je ne comprends pas maintenant, c'est que je n'arrives pas a la faire fonctionner a partir du formulaire.
J'ai pourtant une zone de texte, correctement nommée "texte_recherche".
Marsh Posté le 29-11-2002 à 11:11:12
aie aie aie, je bute sur ce truc, j'aime pas access, mais j'ai pas le choix
qq'un peut m'aider pour relier cette requete au formulaire ?
Marsh Posté le 29-11-2002 à 11:18:47
SELECT * FROM notact
where adr1 like '*' & formulaires![formulaire2]![chp1].value & '*';
C'est bien ça ta syntaxe employée, pasque chez moi ça fonctionne ???
ici je fais référence à un objet : formulaires
le nom de cet objet : formulaire2
le champ de cet objet : chp1
La propriété : value
La table Access : notact
Le champ de la table Access : adr1
Marsh Posté le 29-11-2002 à 11:25:35
merci pour ton aide, ça marche maintenant.
mais si je regarde ta syntaxe avec celle que l'on m'a proposé juste au dessus, il y a une legere difference au niveua des guillemets.
quoi qu'il en soit, c'est bon, merci bcp !
Marsh Posté le 28-11-2002 à 19:54:17
Lorsque l'on a une table admettons "client",
avec un champ nommé "client_nom_entreprise".
A partir d'un formulaire, je souhaiterais que la personne,
puisse rechercher dans cette table "client" toutes
les occurences qui contiennent la valeur de ce qu'à saisie la personne
dans une zone de texte.
pour cela, j'ai écrit le code, tres simple a faire.
le Hic, et c'est là que je bute :
Si dans le champ "client_nom-entreprise" il y a par exemple une personne enregistrée en tant que "Mr Joshua", si la personne dans la zone de texte ecrit juste "joshua", access ne me trouvera rien.
ce que je cherche en fait, c'est trouver une formule qui me permette de chercher dans un Recorset une chaine de caractere.
et pas uniquement l'integralité.
Ceci pour permettre d'avoir un acces plus rapide a la recherche d'un client, car imaginons que l'on a : "les entrepots parisiens a coté de la riviere", si l'utilisateur tape "entrepots", il faudrait que cela me sorte chaque occurence qui conteitn le mot "entrepots".
Vous avez compris ?