Création d'un outil de recherche
en VB/SQL (correction).

 

Première recherche (correction).

Private Sub CmdRecherche_Click()
  Dim SQL As String
  SQL = "Select numCD, TitreCD & ' (' & NomA & ')' from disque, participer, artiste "
  SQL = SQL & "where not invité and NumCD = Part_NumCD and Part_NumA = NumA "
  SQL = SQL & "and (TitreCD & NomA like ""*" & TxtRecherche & "*""); "
  LstRecherche.RowSource = SQL
  Me.Refresh
End Sub

Deuxième recherche (correction).

Private Sub CmdRecherche_Click()
  Dim SQL As String, Chaîne As String, PosEspace As Integer, Mot As String
  Chaîne = TxtRecherche
  SQL = "Select numCD, TitreCD & ' (' & NomA & ')' from disque, participer, artiste "
  SQL = SQL & " where not invité and NumCD = Part_NumCD and Part_NumA = NumA and ("
  PosEspace = InStr(1, Chaîne, " ")
  While PosEspace > 0
    Mot = Left$(Chaîne, PosEspace - 1)
    SQL = SQL & "TitreCD & NomA like ""*" & Mot & "*"" and "
    Chaîne = Right$(Chaîne, Len(Chaîne) - PosEspace)
    PosEspace = InStr(1, Chaîne, " ")
  Wend
  SQL = SQL & "TitreCD & NomA like ""*" & Chaîne & "*""); "

  LstRecherche.RowSource = SQL
  Me.Refresh
End Sub

Troisième recherche (correction).

Private Sub CmdRecherche_Click()
  Dim SQL As String, Chaîne As String, PosEspace As Integer, Mot As String
  Dim Opérateur As String
  Chaîne = TxtRecherche
  SQL = "Select numCD, TitreCD & ' (' & NomA & ')' from disque, participer, artiste "
  SQL = SQL & " where not invité and NumCD = Part_NumCD and Part_NumA = NumA and ("
  If CadreRecherche = 1 Then
    Opérateur = "and "
  ElseIf CadreRecherche = 2 Then
    Opérateur = "or "
  End If

  PosEspace = InStr(1, Chaîne, " ")
  While PosEspace > 0
    Mot = Left$(Chaîne, PosEspace - 1)
    SQL = SQL & "TitreCD & NomA like ""*" & Mot & "*"" " & Opérateur
    Chaîne = Right$(Chaîne, Len(Chaîne) - PosEspace)
    PosEspace = InStr(1, Chaîne, " ")
  Wend
  SQL = SQL & "TitreCD & NomA like ""*" & Chaîne & "*""); "
  LstRecherche.RowSource = SQL
  Me.Refresh
End Sub

Quatrième recherche (correction).

Private Sub CmdRecherche_Click()
  Dim SQL As String, Chaîne As String, PosEspace As Integer, Mot As String
  Dim Opérateur As String, PosGuillemet As Integer
  Chaîne = TxtRecherche
  SQL = "Select numCD, TitreCD & ' (' & NomA & ')' from disque, participer, artiste "
  SQL = SQL & " where not invité and NumCD = Part_NumCD and Part_NumA = NumA and ("
  If CadreRecherche = 1 Then
    Opérateur = "and "
  ElseIf CadreRecherche = 2 Then
    Opérateur = "or "
  End If
  PosEspace = InStr(1, Chaîne, " ")
  While PosEspace > 0
    If Left$(Chaîne, 1) = """" Then
      PosGuillemet = InStr(2, Chaîne, """")
      Mot = Mid$(Chaîne, 2, PosGuillemet - 2)
      If PosGuillemet = Len(Chaîne) Then Chaîne = "" Else Chaîne = Right$(Chaîne, Len(Chaîne) - PosGuillemet - 1)
    Else

      Mot = Left$(Chaîne, PosEspace - 1)
      Chaîne = Right$(Chaîne, Len(Chaîne) - PosEspace)
    End If
    SQL = SQL & "TitreCD & NomA like ""*" & Mot & "*"" " & Opérateur
    PosEspace = InStr(1, Chaîne, " ")
  Wend
  SQL = SQL & "TitreCD & NomA like ""*" & Chaîne & "*""); "
  LstRecherche.RowSource = SQL
  Me.Refresh
End Sub

Cinquième recherche (correction).

Private Sub CmdRecherche_Click()
  Dim SQL As String, Chaîne As String, PosEspace As Integer, Mot As String
  Dim Opérateur As String, PosGuillemet As Integer, ChampsRecherchés As String
  Chaîne = TxtRecherche
  SQL = "Select numCD, TitreCD & ' (' & NomA & ')' from disque, participer, artiste "
  SQL = SQL & " where not invité and NumCD = Part_NumCD and Part_NumA = NumA and ("
  If CadreChampsRecherchés = 1 Then
    ChampsRecherchés = "TitreCD & NomA "
  ElseIf CadreChampsRecherchés = 2 Then
    ChampsRecherchés = "TitreCD "
  ElseIf CadreChampsRecherchés = 3 Then
    ChampsRecherchés = "NomA "
  End If

  If CadreRecherche = 1 Then
    Opérateur = "and "
  ElseIf CadreRecherche = 2 Then
    Opérateur = "or "
  End If
  PosEspace = InStr(1, Chaîne, " ")
  While PosEspace > 0
    If Left$(Chaîne, 1) = """" Then
      PosGuillemet = InStr(2, Chaîne, """")
      Mot = Mid$(Chaîne, 2, PosGuillemet - 2)
      If PosGuillemet = Len(Chaîne) Then Chaîne = "" Else Chaîne = Right$(Chaîne, Len(Chaîne) - PosGuillemet - 1)
    Else
      Mot = Left$(Chaîne, PosEspace - 1)
      Chaîne = Right$(Chaîne, Len(Chaîne) - PosEspace)
    End If
    SQL = SQL & ChampsRecherchés & "like ""*" & Mot & "*"" " & Opérateur
    PosEspace = InStr(1, Chaîne, " ")
  Wend
  SQL = SQL & ChampsRecherchés & "like ""*" & Chaîne & "*""); "
  LstRecherche.RowSource = SQL
  Me.Refresh
End Sub

Sixième recherche (correction).

La procédure qui appelle cette procédure Scoring, si l'utilisateur a cliqué sur scoring, n'est pas écrite.

Private Sub Scoring()
  Dim PosEspace, Chaîne, PosGuillemet, Mot
  DoCmd.RunSQL "delete from mc;"
  Chaîne = TxtRecherche
  PosEspace = InStr(1, Chaîne, " ")
  While PosEspace > 0
    If Left$(Chaîne, 1) = """" Then
      PosGuillemet = InStr(2, Chaîne, """")
      Mot = Mid$(Chaîne, 2, PosGuillemet - 2)
      If PosGuillemet = Len(Chaîne) Then Chaîne = "" Else Chaîne = Right$(Chaîne, Len(Chaîne) - PosGuillemet - 1)
    Else
      Mot = Left$(Chaîne, PosEspace - 1)
      Chaîne = Right$(Chaîne, Len(Chaîne) - PosEspace)
    End If
    DoCmd.RunSQL "insert into mc values (""" & Mot & """)"
    PosEspace = InStr(1, Chaîne, " ")
  Wend
  DoCmd.RunSQL "insert into mc values (""" & Chaîne & """)"
  LstRecherche.RowSource = "scoring"
End Sub

Et la requête SQL :

SELECT NumCD, TitreCD, count(*) FROM Disque, mc
WHERE TitreCD like "*" & mc & "*"
GROUP BY NumCD, TitreCD ORDER BY 3 DESC;


Sébastien PASTORE.