Petit moteur de recherche sql / vb sur base de donnees

Description

Les moteurs de recherche tout monde connait. Dans google ou autre je tape les mots que je recherche separés par des espaces et je tape sur Entrée.
Plus concrètement on a tous une base avec des champs de type Text ou Memo qui contiennent plusieurs dizaines de caractères (voir des centaines), et dans les exemples içi ou là, on nous montre toujours comment rechercher UN SEUL mot.

Vous avez une base access et vous etes debutant en sql et vous voulez la même chose que Google?
(heuuu modestement et toute proportion gardée....)

Voila un tout petit bout de code tres simple qui va vous faire voir la combinaison VB SQL afin de réaliser votre premier moteur de recherche.
le code source fonction en DAO.
ATTENTION si vous utiliser ADO remplacer les * par des %.

preparation:
lier une table à un controle Data ou Adodc ou meme autre apres une adaptation du code de connexion.
lier le controle à votre grille préférée.
dessinez un textbox et nommer le TxtRecherche_Avancee.
assurer vous que dans votre table le champs où se fait la recherche ne prenome :
"designation" modifier le code en cas contraire.
Lancer le Prog.
dans la zone de text, tapez autant de mot que vous le souhaitez separé par un espace (comme google) puis validez.

le moteur va afficher tous les champs contenant la série de mots rechercher.

Voilà, j'espere avoir été claire et bon prog.

Source / Exemple :


Private Sub TxtRecherche_Avancee(KeyAscii As Integer)
    On Error Resume Next

    'Le principe de la rechercher avancee est le suivant:
    'supposont que l'on recherche les mots 'cheval region alsace'
    'Dans le principe on va creer une chaine SQL sous la forme
    'Select * from matable where designation like '*cheval*' AND '*region*' AND '*alsace*'
    'donc on va dabord decouper la suite de mot et la concatener à l'aide de 'AND' afin
    'de construire une chaine SQL correct
    'ATTENTION si vous utiliser ADO remplacer les * par des %
'
If (KeyAscii = 13) Then
    chaine1 = ""
    chaine_complete = Trim(TxtRecherche_Avancee)
    lg = Len(chaine_complete)
    X = 1
    Do Until X = 0
        X = InStr(1, chaine_complete, " ")
        If X = 0 Then
            chaine1 = chaine1 & "'*" & chaine_complete & "*'"
        Else
            chaine1 = Left(chaine_complete, X - 1)
            chaine1 = "'*" & chaine1 & "*' AND designation like "
            chaine_complete = Mid(chaine_complete, X + 1, lg - X)
        End If
    Loop
    Data1.DatabaseName = App.Path & "\MaBase.mdb"
    Data1.RecordSource = "SELECT * FROM matable " & _
    "where designation like " & chaine1 & ""
    Data1.Refresh
End If

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.