[Access] Question technique sur une comparaison de chaine en VBA

Question technique sur une comparaison de chaine en VBA [Access] - VB/VBA/VBS - Programmation

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 ?  :??:

Reply

Marsh Posté le 28-11-2002 à 19:54:17   

Reply

Marsh Posté le 28-11-2002 à 20:07:47    

via une requete sql?


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
Reply

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.

Reply

Marsh Posté le 28-11-2002 à 21:33:02    

regarde plutot pour envoyer une requete sql sur la base


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
Reply

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

Reply

Marsh Posté le 28-11-2002 à 21:45:40    

Code :
  1. SELECT * FROM Clients WHERE client_nom_entreprise LIKE '*" & Me![texte_recherche].Value & "*'"


---------------
Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur.
Reply

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  :??:

Reply

Marsh Posté le 29-11-2002 à 08:31:11    

personne n'a d'idée ?  :sweat:

Reply

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.

Reply

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


Message édité par Cyrille999 le 29-11-2002 à 09:25:13

---------------
L'imagination est plus importante que le savoir. Albert Einstein
Reply

Marsh Posté le 29-11-2002 à 09:22:39   

Reply

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).


---------------
L'imagination est plus importante que le savoir. Albert Einstein
Reply

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.

Reply

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".

Reply

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 ?

Reply

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
 
 ;)  
 
 

Reply

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 !  :)  :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed