IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Recherche rapprochement sur une saisie


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 11
    Points
    11
    Par défaut Recherche rapprochement sur une saisie
    Je voudrai savoir si il etait possible lors d'une saisie inexistante que je face une recherche dans ma base de données et que dans un list box s'affiche tout les enregistrement proche de l'enregistrement saisie inexistant.

    Si quelqu'un sait comment faire et qui pourrai me donner une piste pour resoudre mon probleme.

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Points : 337
    Points
    337
    Par défaut
    Salut

    Dans ta requette utilise la clause LIKE

    A+

  3. #3
    Membre éclairé Avatar de LeXo
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 147
    Points : 868
    Points
    868
    Par défaut
    proche du résultat ??
    c'est a adire proche comment ??

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    en fait c'est sur des nom de rue et imagios que la personne se trompe d'une lettre

  5. #5
    Membre averti
    Homme Profil pro
    Développeur VB6 et tout neuf en .Net
    Inscrit en
    Avril 2005
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VB6 et tout neuf en .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 377
    Points : 446
    Points
    446
    Par défaut
    Bonjour fixfix,

    Voici une fonction dont je me sert pour "tester" la ressemblance de deux chaines.

    Elle te renvoi un score correspondant à un speudo pourcentage de ressemblance.
    Tu parcours ta base et renvoi le (ou les) résultat(s) ayant le plus grand score.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    '-------------------------------------------------------------------------------------------------------------------------------
    ' Ressemblance de chaines
     
    Public Function Ressemblance(ByVal Chaine1 As String, ByVal Chaine2 As String) As Single
    'Cette fonction renvoi un pourcentage de ressemblance entre deux chaines.
    '
    'Tests effectués :
    '  Tests à 3 et 2 lettres
    '    On compare le Chaine1 avec le Chaine2 puis inversement en prenant que des groupes de lettres
    '  Tests à 1 lettres
    '    On compare les mots lettre par lettre pour les deux possibilites de comparaison
    '    ainsi, si on trouve "tard" dans "tardivement", l'inverse n'est pas vrai
    '
    'Ex : si "picole" et "police" donne un tres bon resultat sur les tests à 1 lettre
    '       le resultat est plus mauvais pour les tests à 2 et 3 lettres
    '
    'Attention :
    'La somme des coef donne 100% (ou 1) : 0.10 + 0.10 + 0.15 + 0.15 + 0.25 + 0.25 = 1
    '-------------------------------------------------------------------------------------
      Chaine1 = LCase(Trim(Chaine1))
      Chaine2 = LCase(Trim(Chaine2))
     
      'Tests avec 3 lettres 20%
      Ressemblance = Ressemblance + (CalcTaux(Chaine1, Chaine2, 3) * 0.1)
      Ressemblance = Ressemblance + (CalcTaux(Chaine2, Chaine1, 3) * 0.1)
     
      'Tests avec 2 lettres 30%
      Ressemblance = Ressemblance + (CalcTaux(Chaine1, Chaine2, 2) * 0.15)
      Ressemblance = Ressemblance + (CalcTaux(Chaine2, Chaine1, 2) * 0.15)
     
      'Tests avec 1 lettre  50%
      Ressemblance = Ressemblance + (CalcTaux(Chaine1, Chaine2, 1) * 0.25)
      Ressemblance = Ressemblance + (CalcTaux(Chaine2, Chaine1, 1) * 0.25)
     
      Ressemblance = Round(Ressemblance, 2)
    End Function
     
    Private Function CalcTaux(ByVal Chaine1 As String, ByVal Chaine2 As String, ByVal Precision As Integer) As Single
    ' Chaine1 et Chaine2 : les chaines a comparer
    ' Precision : nombre de caracteres pour les comparaisons
     
      Dim Cpt     As Integer
      Dim NbOk    As Integer
      Dim NbTests As Integer
      Dim Test    As String
     
      NbOk = 0
      NbTests = 0
      For Cpt = 1 To Len(Chaine2)
        'Test si le morceau de Chaine2 est dans Chaine1
        Test = Mid(Chaine2, Cpt, Precision)
        If Len(Test) = Precision Then
          NbTests = NbTests + 1
          If InStr(Chaine1, Test) <> 0 Then NbOk = NbOk + 1
        End If
      Next
     
      If NbTests = 0 Then
        CalcTaux = 0
      Else
        CalcTaux = (NbOk / NbTests) * 100
      End If
    End Function

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Voila mon code pour l'instant il me permet de savoir si la rue saisie existe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'CHAMP RUE
    '--------------------------------------------------------------------------------------------
    Result2 = Me.TxtRue
     
    'Execution du RecordSet
    Set rsRue = New ADODB.Recordset
    SQL2 = "Select PREF_NOM +' '+ NOM from GCES_ART_VOIE2 where PREF_NOM +' '+ NOM = '" & Result2 & "';"
    rsRue.Open SQL2, cnx, adOpenKeyset, adLockBatchOptimistic
     
    'Message d'averstissement si enregistrement inconnu
    If rsRue.RecordCount = 0 Then
        Erreur = MsgBox("Le nom de rue est inconnue ou essayer de saisir le nom avant le prenom", vbCritical, "Nom de rue")
    End If
    Mais apres je ne voit pas omment adapter ton code a cette fonction

  7. #7
    Membre averti
    Homme Profil pro
    Développeur VB6 et tout neuf en .Net
    Inscrit en
    Avril 2005
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VB6 et tout neuf en .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 377
    Points : 446
    Points
    446
    Par défaut
    Le problème de cette fonction, c'est que tu dois parcourir tous tes enregistrements et faire calculer la ressemblance dans VB.
    SQL ne te sert qu’à récupérer tous les enregistrements.

    Si tu veux que se soit la base qui fasse la recherche de ressemblance, il faut coder la fonction dans une procédure stockée de ta base.
    Je sais que dans SQL Server il y a une fonction "similaire" qui travail sur la phonétique des mots, c'est SoundEx. Je ne l'ai jamais utilisé car elle est basée sur de la phonétique Anglaise.

  8. #8
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    d'accord merci

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Mais m'a base est une base access alors le soundex ne marchera pas ?

  10. #10
    Membre averti
    Homme Profil pro
    Développeur VB6 et tout neuf en .Net
    Inscrit en
    Avril 2005
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VB6 et tout neuf en .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 377
    Points : 446
    Points
    446
    Par défaut
    Citation Envoyé par fixfix
    Mais m'a base est une base access alors le soundex ne marchera pas ?
    Je ne sais pas, je n'utilise plus Access (depuis la version 97...) .

  11. #11
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Citation Envoyé par fixfix
    Mais apres je ne voit pas omment adapter ton code a cette fonction
    Tu mets le code que tu as créé dans l'évenement change de ton textbox, et tu mets la requête suivante (j'ai juste mis le LIKE )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL2 = "Select PREF_NOM +' '+ NOM from GCES_ART_VOIE2 where 
    PREF_NOM +' '+ NOM Like '" & Result2 & "%';"

  12. #12
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    je comprend pas tout ou je doit mettre ce code

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Va chercher ici cela pourrait t'aider

    http://access.developpez.com/sources...quete#Soundex1

    Starec

  14. #14
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Mais ou mettre ce code je ne vois pas ? merci

  15. #15
    Invité
    Invité(e)
    Par défaut
    Re

    Tu copies tout le code dans un module, et ensuite tu peux utiliser la fonction
    Soundex() n'importe où.

    Si tu as bien compris cette fonction fait une recherche phonétique.

    Regarde l'exemple

    Ainsi, Soundex("Martin") et Soundex("Martan") renvoient la même valeur.

    Starec

  16. #16
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    ok je l'ai copie mais ce que je voudrai savoir c'est si je peux faire la comparaison d'un enregistremnt de ma base a un enregistrement saisie sur mon interface vb.

    Merci

  17. #17
    Invité
    Invité(e)
    Par défaut
    Oui

    Il faut que la valeur de ton interface VB (donc saisie manuellement) tu l'as met dans ta fonction, et que tu parcours les enregitrements de ta table pour faire des tests.

    Attention, cette fonction est phonétique, si l'intilisateur rentre Rue Trucmuche au lieu de Impasse Trucmuche, cela ne donnera rien, c'est vraiment valable pour les fautes d'orthographes
    Starec

  18. #18
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Mais tout le code je le met dans ma base de données access ou je le met dans mon vb ?

  19. #19
    Invité
    Invité(e)
    Par défaut
    Re

    Dans ton vb, ce sera plus rapide et tu parcours tes enregistrements par ADO.

    Ce code était sur les sources Access, a priori il ne fait pas appel à des instructions propres à Access, il devrait fonctionner.

    As-tu bien lu le message en gras de mon post précédent ?

    Starec

  20. #20
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL4 = SQL4 & "Soundex(PREF_NOM +' '+ NOM)=" & Chr(34) & Soundex(Nz(TxtRue, "")) & Chr(34)
    je voudrai savoir a quoi correspond le Nz
    Parce qu'il me met erreur de compilation Procedure sub ou fonction non defini

    merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/10/2006, 19h46
  2. Recherche globale sur une table
    Par webrider dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2006, 11h41
  3. [Oracle 8i]Recherche doublon sur une même table
    Par fmoriet dans le forum Oracle
    Réponses: 3
    Dernier message: 01/08/2006, 10h09
  4. recherche multicritères sur une requête?
    Par amélie22 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/06/2006, 11h25
  5. [Stratégie] attendre un évenement sur une saisie clavier?
    Par ukanoldai dans le forum Général Java
    Réponses: 4
    Dernier message: 28/02/2006, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo