Bonjour,

J'ai une application où je fais une recherche via requêtes paramétrées sur une base de donnée oracle (ODA).

Dans ma fenêtre vb.net j'ai plusieurs filtres(21): nom, statut, profil, etc pour la recherche de candidats.

Quand je veux afficher tout les résultats sans filtrer(juste en appuyant sur ENTER) dans la zone nom, mon résultat prend un peu de temps avant de s'afficher.

Voici mon code

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
 
Public Sub PROC_RECHERCHE()
        Dim str_requete As String = String.Empty
        Dim str_date_debut As String = ""
        Dim str_date_fin As String = ""
        Dim date_debut As Date = CDate("01/01/1999")
        Dim date_fin As Date = CDate(Now.ToShortDateString())
        Dim ora_command_filtre As OracleCommand
        Dim dtr As OracleDataReader
        Dim dtr1 As OracleDataReader
        Dim str_nom_prenom As String = String.Empty
        Dim str_adresse As String = String.Empty
        Dim str_mail_reponse As String = "X"
        Dim str_date_mail As String = String.Empty
        Dim str_date_form As String = String.Empty
        Dim str_date_genere As String = String.Empty
        Dim str_etp(0 To 2) As String
        Dim str_contrat(0 To 2) As String
        Dim str_prest(0 To 3) As String
        Dim str_site(0 To 5) As String
        Dim str_age As String
        Dim str_lien As String = String.Empty
 
        Try
 
            TXT_NOM.Text = UCase(Me.TXT_NOM.Text)
 
            If CHECK_ETP.Checked Then str_etp(0) = "ETP 1"
            If CHECK_3_ETP.Checked Then str_etp(1) = "ETP 3/4"
            If CHECK_DEMI.Checked Then str_etp(2) = "ETP 1/2"
            If CHECK_CDI.Checked Then str_contrat(0) = "CDI"
            If CHECK_CDD.Checked Then str_contrat(1) = "CDD"
            If CHECK_CR.Checked Then str_contrat(2) = "CR"
            If CHECK_JF.Checked Then str_prest(0) = "Jour férié"
            If CHECK_WK.Checked Then str_prest(1) = "Week-end"
            If CHECK_NUIT.Checked Then str_prest(2) = "Nuit"
            If CHECK_SOIR.Checked Then str_prest(3) = "Soir"
            If CHECK_ATH.Checked Then str_site(0) = "Ath"
            If CHECK_BAUDOUR.Checked Then str_site(1) = "Baudour"
            If CHECK_BELOEIL.Checked Then str_site(2) = "Beloeil"
            If CHECK_DOUR.Checked Then str_site(3) = "Dour"
            If CHECK_FRAMERIE.Checked Then str_site(4) = "Frameries"
            If CHECK_HORNU.Checked Then str_site(5) = "Hornu"
 
            If DTP_DEBUT.Text <> " " Then
                str_date_debut = DTP_DEBUT.Text
                date_debut = CDate((DTP_DEBUT.Value).ToShortDateString())
            End If
            If DTP_FIN.Text <> " " Then
                date_fin = CDate((DTP_FIN.Value).ToShortDateString())
            End If
 
            str_requete = "SELECT * FROM VUE_RECRUTEMENT WHERE NOM LIKE :nom AND DESCRIPTION_PROFIL LIKE :profil AND DESCRIPTION_STATUT LIKE :statut AND " _
                        & "ETP_1 LIKE :etp_1 AND ETP_3_4 LIKE :etp_3_4 AND ETP_1_2 LIKE :etp_1_2 AND CDI LIKE :cdi AND " _
                        & "CDD LIKE :cdd  AND CR LIKE :cr AND W_E LIKE :w_e AND JF LIKE :jf AND SOIR LIKE :soir AND NUIT LIKE :nuit AND " _
                        & "SITE_ATH LIKE :ath AND SITE_BAUDOUR LIKE :site_baudour AND SITE_BELOEIL LIKE :site_beloeil  AND SITE_DOUR LIKE :site_dour AND SITE_FRAMERIE LIKE :site_framerie AND " _
                        & "SITE_HORNU LIKE :site_hornu AND DATE_ENCODAGE BETWEEN :date_debut AND :date_fin ORDER BY ID_CANDIDAT "
 
            ora_command_filtre = New OracleCommand(str_requete, conn)
            With ora_command_filtre.Parameters()
                .Add(New OracleParameter(":nom", OracleDbType.Char, 255))
                .Add(New OracleParameter(":profil", OracleDbType.Char, 255))
                .Add(New OracleParameter(":statut", OracleDbType.Char, 255))
                .Add(New OracleParameter(":etp_1", OracleDbType.Char, 32))
                .Add(New OracleParameter(":etp_3_4", OracleDbType.Char, 255))
                .Add(New OracleParameter(":etp_1_2", OracleDbType.Char, 255))
                .Add(New OracleParameter(":cdi", OracleDbType.Char, 255))
                .Add(New OracleParameter(":cdd", OracleDbType.Char, 255))
                .Add(New OracleParameter(":cr", OracleDbType.Char, 255))
                .Add(New OracleParameter(":w_e", OracleDbType.Char, 255))
                .Add(New OracleParameter(":jf", OracleDbType.Char, 255))
                .Add(New OracleParameter(":soir", OracleDbType.Char, 255))
                .Add(New OracleParameter(":nuit", OracleDbType.Char, 255))
                .Add(New OracleParameter(":ath", OracleDbType.Char, 32))
                .Add(New OracleParameter(":site_baudour", OracleDbType.Char, 255))
                .Add(New OracleParameter(":site_beloeil", OracleDbType.Char, 255))
                .Add(New OracleParameter(":site_dour", OracleDbType.Char, 255))
                .Add(New OracleParameter(":site_framerie", OracleDbType.Char, 255))
                .Add(New OracleParameter(":site_hornu", OracleDbType.Char, 255))
                .Add(New OracleParameter(":date_debut", OracleDbType.Date))
                .Add(New OracleParameter(":date_fin", OracleDbType.Date))
            End With
 
            With ora_command_filtre
                .Parameters(":nom").Value = TXT_NOM.Text + "%"
                .Parameters(":profil").Value = CB_PROFIL.Text + "%"
                .Parameters(":statut").Value = CB_STATUT.Text + "%"
                .Parameters(":etp_1").Value = str_etp(0) + "%"
                .Parameters(":etp_3_4").Value = str_etp(1) + "%"
                .Parameters(":etp_1_2").Value = str_etp(2) + "%"
                .Parameters(":cdi").Value = str_contrat(0) + "%"
                .Parameters(":cdd").Value = str_contrat(1) + "%"
                .Parameters(":cr").Value = str_contrat(2) + "%"
                .Parameters(":w_e").Value = str_prest(1) + "%"
                .Parameters(":jf").Value = str_prest(0) + "%"
                .Parameters(":soir").Value = str_prest(3) + "%"
                .Parameters(":nuit").Value = str_prest(2) + "%"
                .Parameters(":ath").Value = str_site(0) + "%"
                .Parameters(":site_baudour").Value = str_site(1) + "%"
                .Parameters(":site_beloeil").Value = str_site(2) + "%"
                .Parameters(":site_dour").Value = str_site(3) + "%"
                .Parameters(":site_framerie").Value = str_site(4) + "%"
                .Parameters(":site_hornu").Value = str_site(5) + "%"
                .Parameters(":date_debut").Value = date_debut
                .Parameters(":date_fin").Value = date_fin
            End With
 
            ora_command_filtre.Connection.Close()
            ora_command_filtre.Connection.Open()
            dtr1 = ora_command_filtre.ExecuteReader
 
            DTGV_RECH.Rows.Clear()
 
            int_record = 0
 
            If dtr1.HasRows Then
                While dtr1.Read
                    str_date_mail = ""
                    str_date_form = ""
                    str_date_genere = ""
                    str_mail_reponse = ""
                    str_lien = ""
                    int_record = int_record + 1
                    str_date_form = ""
 
                    If dtr1("Date_nais").ToString <> vbNullString Then
                        str_age = CInt(FONC_CALCUL_AGE(CDate(dtr1("Date_nais").ToString)))
                    Else
                        str_age = "?"
                    End If
                    str_mail_reponse = "X"
 
                    If Trim(dtr1("DATE_MAIL_FORMULAIRE").ToString) <> vbNullString Then str_date_form = CStr(CDate(dtr1("DATE_MAIL_FORMULAIRE").ToString))
 
                    If Trim(dtr1("DESCRIPTION_PROFIL").ToString) <> "Non défini" Then
                        str_requete = "select * from tbl_candidat_profil where id_candidat=" & dtr1("ID_CANDIDAT").ToString & " and id_profil=" & FONC_RENVOI_ID_PROFIL(Trim(dtr1("DESCRIPTION_PROFIL").ToString))
                        dtr = FONC_REQ_DTR_ORA(str_requete)
                        If dtr.HasRows Then
                            If dtr("LIEN_WORD").ToString <> "" Then
                                str_mail_reponse = "V"
                                str_date_mail = dtr("DATE_MAIL_REPONSE").ToString
                                str_lien = dtr("LIEN_WORD").ToString
                                If Trim(dtr("DATE_DOC_GENERE").ToString) <> vbNullString Then str_date_genere = CStr(CDate(dtr("DATE_DOC_GENERE").ToString))
                            End If
                        End If
                    End If
 
                    str_nom_prenom = Trim(Trim(dtr1("TITRE").ToString) & " " & Trim(dtr1("nom").ToString) & " " & Trim(dtr1("prenom").ToString))
                    Me.DTGV_RECH.Rows.Add(dtr1("ID_CANDIDAT").ToString, str_nom_prenom, str_age, Trim(dtr1("DESCRIPTION_PROFIL").ToString), Trim(dtr1("DESCRIPTION_STATUT").ToString), Trim(dtr1("JOUR_RESERVE").ToString), Trim(dtr1("COMMENTAIRE").ToString), Trim(dtr1("CANDIDAT_EXTERNE_INTERNE").ToString), Trim(dtr1("SOUTIEN_POLITIQUE").ToString), str_date_form, str_date_genere, str_date_mail, str_mail_reponse, Trim(dtr1("NOM").ToString), Trim(dtr1("PRENOM").ToString), Trim(dtr1("RUE").ToString), Trim(dtr1("NUMERO").ToString), Trim(dtr1("TITRE").ToString), Trim(dtr1("CODE").ToString), Trim(dtr1("LOCALITE").ToString), Trim(dtr1("ADRESSE_MAIL").ToString), Trim(dtr1("BOITE").ToString))
 
                    If str_lien <> vbNullString Then
                        Me.DTGV_RECH.Rows(int_record - 1).Cells(12).ToolTipText = str_lien
                    End If
 
                    Select Case Trim(dtr1("DESCRIPTION_STATUT").ToString)
                        Case "Inactif"
                            Me.DTGV_RECH.Rows(int_record - 1).DefaultCellStyle.BackColor = Color.FromArgb(200, 144, 228)
                        Case "Positif"
                            Me.DTGV_RECH.Rows(int_record - 1).DefaultCellStyle.BackColor = Color.FromArgb(50, 205, 50)
                        Case "Engagé"
                            Me.DTGV_RECH.Rows(int_record - 1).DefaultCellStyle.BackColor = Color.FromArgb(98, 217, 215)
                        Case "Négatif"
                            Me.DTGV_RECH.Rows(int_record - 1).DefaultCellStyle.BackColor = Color.FromArgb(211, 82, 73)
                    End Select
 
                End While
                dtr1.Close()
                DTGV_RECH.Rows(0).Selected = True
            Else
                lbl_resultat.Text = "Aucun résultat trouvé.."
            End If
            Call PROC_MAJ_LABEL_RESULTAT()
            Call PROC_COULEUR_DGV()
        Catch ex As Exception
            MessageBox.Show(ex.Message & Chr(13) & "Erreur dans la recherche de candidatures")
        End Try
    End Sub
Avez vous des conseils pour optimiser ma recherche ?

J'ai l'impression que ça va plus vite si je renseigne au moins un filtre.

D'avance merci