Requête SQL avec LIKE [Résolu]

Signaler
Messages postés
76
Date d'inscription
vendredi 12 novembre 2004
Statut
Membre
Dernière intervention
15 juin 2009
-
Messages postés
76
Date d'inscription
vendredi 12 novembre 2004
Statut
Membre
Dernière intervention
15 juin 2009
-
Bonjour,
Je souhaiterais savoir comment faire pour rechercher une partie d'une chaîne de caractères, je m'explique :
je dispose de 2 tables ou il y a des enregistrements (nom, prenom, adresse, etc.)
      - ma 1ère table comprend un enregistrement tel que TOTO pour le nom
      - ma 2ème table comprend un enregistrement tel que M. TOTO pour le nom (c'est la même personne)

quand j'exécute le code ci-dessous :
il ne me trouve pas M. TOTO à cause du M. pour les monsieur, (j'ai également Mlle. Mme.)
je ne peux pas changer la 2ème table pour ceux qui vont me dire enlève M. ou Mme. ou encore Mlle.

Set DB1 = DBEngine(0)(0)
    Set rsNewResponsable = DB1.OpenRecordset("SELECT * FROM PVHT_VH")
    Set rsNewResponsable2 = DB1.OpenRecordset("SELECT * FROM PVHT_RESP")
       
    rsNewResponsable.MoveFirst
    rsNewResponsable2.MoveFirst
   
    'Pour la table PVHT_RESP
    Do Until rsNewResponsable2.EOF
        'Si le champ de la table PVHT_RESP correspond
        If Trim(lsAncienResponsable) = Trim(rsNewResponsable2.FindFirst.Fields("RESPONSABLE")) Then
            rsNewResponsable2.EDIT
            rsNewResponsable2.Fields("RESPONS_SITE") = RESPONSABLE.Text
            rsNewResponsable2.Update
            Exit Do
           
        End If
        rsNewResponsable2.MoveNext
    Loop

J'ai donc voulu changer ma requête intitulée rsNewResponsable2 par celle-ci

Set rsNewResponsable2 = DB1.OpenRecordset("SELECT * FROM PVHT_RESP WHERE RESPONSABLE LIKE ' & %lsAncienResponsable &% '")

Le problème est que mon application plante car il me dit que je n'ai aucun enregistrement en cours.

Si quelqu'un peut m'aider, merci par avance.

7 réponses

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
32
Oui,

Je crois que tu dois etre sur une bonne piste.
http://www.developpez.net/forums/archive/index.php/t-2009.html

Ca dépend si tu est en ADO ou en DAO, a apparament c'est tu DAO que tu fais, ca doit daté de 10 ans cette techno.

ADO a remplacé depuis VB5 ou VB6
Et meme maintenant c'est ADO.NET

Bon courage
Messages postés
76
Date d'inscription
vendredi 12 novembre 2004
Statut
Membre
Dernière intervention
15 juin 2009

C'est bon je viens de trouver la solution à mon petit problème voici la requête SQL correcte :
Set rsNewResponsable2 = DB1.OpenRecordset("SELECT * FROM PVHT_RESP WHERE UCase(RESPONSABLE) LIKE '*" & UCase(lsAncienResponsable) & "*' ")

 Merci pour ton adresse Internet nhervagault
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
32
salut

ta requete semble fausse

"SELECT * FROM PVHT_RESP WHERE RESPONSABLE LIKE '%" & lsAncienResponsable & "% '"

Cette requete me semble mieux construite??
Attention aux espaces entre
' et %
% et "

Et lsAncienResponsable ne doit pas appartenir la requete c'est une variable, sinon access cherchera les enregistrements avec lsAncienResponsable comme responsable et c'est normal qu'il en trouvera jamais

Tu pourquoi tu ne mettrais pas une colonne calculée a ta table pour gérer ta table.

Alter table x
add c varchar (50)

update x
set c= trim(replace(replace(replace(n,'M.',''),'mme',''),'mlle',''))

c'est pas sur que ca fonctionne.





Normalament pour bien faire tu devrais mettre une foreign key technique et non fonctionnelle. Genre un entier auto incrémenté. Et liée les tables entre elles.
Messages postés
76
Date d'inscription
vendredi 12 novembre 2004
Statut
Membre
Dernière intervention
15 juin 2009

Salut, ta requete ne fonctionne pas et elle est identique à la mienne, il me dit que je n'ai pas d'enregistrement.
Mon boss souhaite que je fasse une requete comme ça avec le LIKE.
Peux tu m'aider un peu plus merci
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
32
Salut

As tu testé la requete dans access dans un premier temps.

C'est a dire avec des valeur fixe.

Exemple

SELECT * FROM PVHT_RESP WHERE RESPONSABLE LIKE '%Truc%' pour monsieur truc

Si cette requete ne fonctionne pas il faut voir la cause.

Si cette requete fonctionne mais en dur dans ton code

Si elle fonctionne alors remplace truc par une valuer que tu effectue en dur

Si ca fonctionne alors mais ta variable de fadon dynamique.

Il faut y aller par étape, tu ne trouves pas d'ou vient le probleme.

Il y a surement une cause, que tu ne vois pas car tu dois etre trop axé sur une mauvaise recherche.

Bon courage.
Messages postés
76
Date d'inscription
vendredi 12 novembre 2004
Statut
Membre
Dernière intervention
15 juin 2009

J'ai testé ma requête dans ACCESS et elle fonctionne.
Quand je la met dans mon code VB en laissant la valeur en dur cela ne fonctionne plus "aucun enregistrement".
J'ai vu sur un site Internet que si les % ne fonctionnaient pas il fallait les remplacer par des *.
Je vais essayer avec des *
Messages postés
76
Date d'inscription
vendredi 12 novembre 2004
Statut
Membre
Dernière intervention
15 juin 2009

Cela ne fonctionne toujours pas meme avec les *.
Je ne vois pas d'ou vient le problème (ça m'énerve)