PETIT MOTEUR DE RECHERCHE SQL / VB SUR BASE DE DONNEES

wcwmans Messages postés 9 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 4 décembre 2003 - 28 nov. 2003 à 12:01
m2rtech Messages postés 239 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 20 février 2012 - 26 mars 2006 à 00:07
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/18192-petit-moteur-de-recherche-sql-vb-sur-base-de-donnees

m2rtech Messages postés 239 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 20 février 2012
26 mars 2006 à 00:07
connais pas bien trasact sql (mais voici ue piste)

il te suffira de créer une requete jointé (lol), et d'adresser
les champs des différentes tables de la sorte :

Champ_recherche = "Articles.référence & Articles.désignation & Fournisseurs.fournisseur"

Requete_Articles = Requete_Articles_De_base & _
" where " & Champ_recherche & " LIKE ""*" & txtRech & "*""

chez moi ça marche. j'arrive à rechercher simultanement dans plusieurs champs de plusieurs tables.
Aurel_xp Messages postés 1 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 17 mars 2006
17 mars 2006 à 08:58
Voila je cherche l' équivalent en trasact SQl , une fonction qui chercherait dans plusieur table sur une même base.
:)

Merci
m2rtech Messages postés 239 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 20 février 2012
29 déc. 2005 à 00:27
Salut,
je republie le code le cas ou, mais je confirme qu'il marchait avec plus de 2 mots clefs (donc 3, 4 etc) ET ce meme avec des fragments(google n'a qu'a bien se tenir lol) de mots et dans le désordre.
ex: vous rechercher des vis Chc zingué M12 par boite de cent :
vous tapez : vis zin boi cent

revoici le code tel qu'il tourne aujourd'hui :
Private Sub TxtRecherche_Avancee_KeyPress(KeyAscii As Integer)
On Error GoTo fin

'Le principe de la rechercher avancee est le suivant:
'supposont que l'on recherche les mots 'moteur 450Kw Triphase'
'Dans le principe on va creer une chaine SQL sous la forme
'Select * from table where designation like '*moteur*' AND '*450Kw*' AND '*Triphase*'
'donc on va dabord decouper le suite de mot et la concatener à l'aide de 'AND' afin
'de construire une chaine SQL correct
If (KeyAscii = 13) Then
Dim chaine1 As String, chaine_complete As String
Dim lg As Integer, X As Integer
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 articles.désignation like "
chaine_complete = Mid(chaine_complete, X + 1, lg - X)
End If
Loop
Data1.RecordSource = Requete_Articles_De_base & " where articles.désignation like " & chaine1 & Chaine_de_Group_BY & " ORDER BY " & Type_Tri_Sql_Articles
Data1.Refresh
End If
Exit Sub
fin:
err.description
End Sub
themioux Messages postés 45 Date d'inscription dimanche 29 mai 2005 Statut Membre Dernière intervention 14 avril 2011
15 nov. 2005 à 12:52
Rectification... ce code ne marche qu'avec 2 mots clefs
Petite rectification donc...
Dim chaineTmp As String
...

If X = 0 Then
chaine1 = chaine1 & "'*" & chaine_complete & "*'"
Else
chaineTmp = Left(chaine_complete, X - 1)
chaine1 = chaine1 & "'*" & chaineTmp & "*' AND designation like "
chaine_complete = Mid(chaine_complete, X + 1, lg - X)
End If
...

voilà ^^
themioux Messages postés 45 Date d'inscription dimanche 29 mai 2005 Statut Membre Dernière intervention 14 avril 2011
15 nov. 2005 à 12:02
Code génial, parfait pour faire des recherche sur plusieurs champs (après quelques modifications tout de même ;) )
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
8 mai 2004 à 20:40
Extrêmement rapide : moins de 100 ms sur un Athlon XP 2400+ avec une recherche portant sur une base de données de plus de 40000 entrées !

Très pratique ton code !

9/10

DarK Sidious
m2rtech Messages postés 239 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 20 février 2012
29 nov. 2003 à 02:22
à la demande de wcwmans,

le moteur sous vb avec base access.


Le top serait une base de 15 à 20000 lignes avec designation à ralonge.
wcwmans Messages postés 9 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 4 décembre 2003
28 nov. 2003 à 12:01
Bonjour, je narrive pas a me servir de ta source j'aimetrais que tu nous donne un exemple dans un zip c'est toujours plus facile d'analiser une source avec des commentaires (ainsi qu'une BD quand il y en a une )que d'ajouter un bout de code dans un prog.
merci à +++
Rejoignez-nous