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 64 65 66 67 68 69 70 71 72 73
| Private Sub cmd_Research_Click()
'Filtre pour le sous-formulaire des Données
Dim SQL As String
Dim NomRequete As String
Dim Compteur As Integer
NomRequete = "RFacture"
'Appel de la procedure de création de requête
'pour le nom de type texte pour Zone de Texte
Restriction Nz(txtNom, ""), " [Nom]", NomRequete, Compteur, SQL, 0
'pour le prénom de type texte pour Zone de Texte
Restriction Nz(txtPrénom, ""), " [Prénom] ", NomRequete, Compteur, SQL, 0
'Pour le prix pour Zone de Texte
Restriction Nz(txtPrix, ""), "[Prix]", NomRequete, Compteur, SQL, 1
'pour le prénom de type texte pour Zone de Texte
Restriction Nz(txtNomdeProduit, ""), "[Produit1] & [Produit2]", NomRequete, Compteur, SQL, 2
'affiche requête dans la fenêtre d'exécution
Debug.Print SQL
'Affecte la requête au sous formulaire
Me.RESULTS_OF_THE_RESEARCH.Form.RecordSource = SQL
End Sub
Public Sub Restriction(ByVal Chaine As String, _
ByVal ChamP As String, ByVal matable As String, _
ByRef Argument As Integer, ByRef ClausE As String, ByRef astype As Integer)
' Choix du type : 0 pour un string, 1 pour un numérique ou booleen
' 2 pour une date
'Construit la requête au premier passage
If Argument = 0 Then
'Elimine les espaces
matable = Trim$(matable)
'Si table est une sous requete :(commence par select)
If InStr(1, matable, "SELECT ", vbTextCompare) <> 0 Then
'Enleve le ; s'il existe
If Right(matable, 1) = ";" Then _
matable = Left(matable, Len(matable) - 1)
'encadre la sous requete avec des ()
ClausE = "SELECT * FROM (" & matable & ")"
Else
ClausE = "SELECT * FROM " & matable
End If
End If
If Chaine <> "" Then
If Argument = 0 Then
' Ajoute le WHERE
ClausE = ClausE & " WHERE "
' Ajout de l'opérateur "AND" si le where existe déja
Else: ClausE = ClausE & " AND "
End If
Select Case astype
Case 0 'Ajoute le critère si le type est texte pour une liste déroulante
ClausE = ClausE & ChamP & " like " & Chr(34) & "" & Chaine & "" & Chr(34)
Case 1 'Ajoute le critère si le type est Numérique
ClausE = ClausE & " 0,9 * " & Chaine & " < " & ChamP & " < " & "1,1 * " & Chaine & Chr(34)
Case 2 'Ajoute le critère si le type est texte pour une zone texte
ClausE = ClausE & ChamP & " like " & Chr(34) & "" & Chaine & "" Or ChamP & " like " & Chr(34) & "" & Chaine & "" & Chr(34)
End Select
Argument = Argument + 1
End If
'argument chaine correspond à la valeur recherchée.
'argument champ correspond au champ sur lequelle doit se faire la restriction.
'argument matable correspond au nom de la table ou d'une requête.
'argument Argument est un entier.
'argument Clause est une chaine qui acceptera le résultat.
'argument astype correspond à un entier représentant le type du champ. 0 pour du texte, 1 pour du numérique, 2 pour une date.
End Sub |
Partager