objet case à cocher | coché = filtrer formulaire | non coché = ne plus filtrer
Je suis parti d'une idée simple : puis-je cocher une case à cocher pour demander à ce que le formulaire applique le filtrage de mes rendez-vous. J'ai fait un formulaire qui affiche les données de la "requete1"
Pour Filtrer sur commande situé sur le formulaire lui même
ici par critère de date lorsque la case à cocher est coché
ajouter au formulaire une case ici "op-Filtre" et un zone de texte "F_Dat"
qui vont permettre de recuperer la commande de filtrage ou non
le reste de fromulaire est geré automatiquement par sa methode .Execute() du formulaire
qui remet à jour les données du formulaire en fonction du sql cuisiné.
Le sql du formulaire est une requete appelé "Requete1" que l'on change selon
les besoins de filtrage ou non par la routine elle même.
Il suffit ensuite de lier le sub avec l'évènement de changement de valeur sur
la case à cocher Op_Filtre
Voici la routine sub :
Code : Tout sélectionner
Sub Filtrer
'ici il faut changer la requete pour filtrer ou non les enregistrement
Dim aForm, C1, C2, C3, C4, C5, Fr, DSource, DBDoc, Rq as object
Dim s, d as String
Dim mm, dd, yy as string
Dim IName as string
Dim nF, Numero, i as Integer
'Cette partie trouve le "Frames" courant
IName = "com.sun.star.comp.dba.ODatabaseDocument"
nF = StarDesktop.Frames.Count
Numero = -1
For i = nF-1 To 0 Step -1
Fr = StarDesktop.Frames.getByIndex( i )
If (IName = Fr.Controller.Model.ImplementationName) Then Numero = i
Next i
If Numero = -1 Then Exit sub
'on obtient dans Fr le Frames que l'on utilise
Fr = StarDesktop.Frames.getByIndex( Numero )
'on se branche sur son datasource
DSource = Fr.Controller.DataSource
'Le document de la base de donnée auquel est liée ...
DBDoc = DSource.DatabaseDocument
'Notre requete "Requête1" à éditer par routine
Rq = DBDoc.DataSource.QueryDefinitions.GetByName("Requête1")
'puis lire les contrôles du formulaires qui
'permettent de demander le filtrage par date
aForm = thiscomponent.DrawPage.Forms.GetByName("MainForm")' le formulaire
'quand la case Option Filtre est cochée, on filtre sur
'F_Dat zone de texte de la date
'recuperons les controles
C1 = aForm.getByName("Op_Filtre")
C2 = aForm.getByName("F_Dat")
C3 = aForm.getByName("TextBox3")
C4 = aForm.getByName("MainForm_Grid")
C5 = C4.getByName("Date")
If c1.CurrentValue = 0 then
'quand C1 est à zero (non coché) pas de condition where, on affiche tout
s = "SELECT ""ID_Num"", ""Date"", ""Heure"", ""Nom_Numero"" FROM ""Rendez_Vous"""
s = s + " ORDER BY ""Date"" ASC, ""Heure"" ASC"
Rq.Command = s
aForm.Execute()
Exit Sub
End If
d = C2.Text
If d = "" Then exit sub
'petit test sur date
'si la date n'est pas entrée on sort
dd = Trim(Str(Day(d)))
mm = Trim(Str(Month(d)))
yy = Trim(Str(Year(d)))
'on transfert la date en texte compatible sql
d = yy + "-" + mm + "-" +dd
'revoyons notre sql
s = "SELECT ""ID_Num"", ""Date"", ""Heure"", ""Nom_Numero"" FROM ""Rendez_Vous"""
s = s + " WHERE ""Date"" = {D '" + d + "' }"
s = s + " ORDER BY ""Date"" ASC, ""Heure"" ASC"
'Refaisons la requete à notre volonté
Rq.Command = s
'mise à jour du formulaire et ses sous objets:
aForm.Execute()
End Sub