Bonjour !

Je savais pas vraiment quel titre mettre. J'ai un outil qui va afficher dans une listbox la liste des quelques 4000 clients d'une boîte. En cliquant sur un cliant, j'afficherai toutes ses informations.

J'ai une première requête qui sélectionne tout les champs de ma base client et rempli ma listbox. Ensuite, lorsque je clique sur un client, j'ai vais afficher les informations en utilisant le selectedIndex de ma listbox et en fouillant mon dataset (puisque les données y sont enregistrées). Seulement j'ai une fonction de recherche (pour le moment rudimentaire) qui, lorsqu'on l'exécute, fait un SELECT WHERE et affiche les résultats dans ma listbox. Jusque là, si y a des petits soucis de réactivités, c'est encore utilisable. Mais quand je clique sur "rétablir" pour ôter le filtre et remettre tous mes clients dans ma listbox, je refait un SELECT.

Et c'est dans ce cas là que ça pose problème, puisqu'il m'arrive d'avoir une fenêtre "envoyer le rapport d'erreur" de Windows. Le programme ne plante pas, mais il est clairement instable. Comment alléger mon code pour éviter ce problème ?

Le 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
 
'Je vérifie lors de la sélection des clients, si on applique un filtre ou si on charge simplement tous les clients
If UBound(filtres) > 0 Then
            'Je vérifie si ma recherche est global ou sélective (ce n'est pas important, j'ai juste un système de recherche global ou on recherche une partie d'un mot dans tous les champs, ou un système de recherche par champ que je n'ai pas encore implanté)
            If filtres(UBound(filtres)) = False Then
                'Là je sélectionne toutes les colonnes de ma table client afin de rechercher dans tous mes champs n'importe quel valeur entrée
                DA1.SelectCommand = cmd1
                DA1.SelectCommand.Connection = cn
                DA1.SelectCommand.CommandText = "SELECT column_name FROM information_schema.columns where table_name='client' and (data_type='character' or data_type='text');"
                DS1 = New DataSet("data")
                DA1.Fill(DS1)
 
                'Là je fais un select en générant une requête à partir des champs se trouvant dans ma base client
                DA.SelectCommand = cmd
                DA.SelectCommand.Connection = cn
                DA.SelectCommand.CommandText = "SELECT * from client WHERE"
                splitedFiltre = Split(filtres(0), " ")
                For j = 0 To DS1.Tables(0).Rows.Count - 1
                    For i = 0 To UBound(splitedFiltre)
                        If i <> 0 Or j <> 0 Then DA.SelectCommand.CommandText = DA.SelectCommand.CommandText & " OR"
                        DA.SelectCommand.CommandText = DA.SelectCommand.CommandText & " UPPER(" & DS1.Tables(0).Rows.Item(j).ItemArray(0).ToString & ") LIKE"
                        DA.SelectCommand.CommandText = DA.SelectCommand.CommandText & " UPPER('%" & splitedFiltre(i) & "%')"
                    Next i
                Next j
                DA.SelectCommand.CommandText = DA.SelectCommand.CommandText & " ORDER BY nom;"
                DS = New DataSet("data")
                DA.Fill(DS)
                If DS.Tables(0).Rows.Count = 0 Then
                    MsgBox("Votre recherche n'a retournée aucun résultat")
                    loadClients()
                    bt_retablir.Enabled = False
                Else
                    Filtre.Close()
                    bt_retablir.Enabled = True
                End If
            'Pour implémenter le système de filtre plus tard
            ElseIf filtres(UBound(filtres)) = True Then
            End If
        Else
            'La commande exécutée au démarrage de l'appli ou lorsqu'on annule un filtre. Un simple select de toute ma base
            DA.SelectCommand = cmd
            DA.SelectCommand.Connection = cn
            DA.SelectCommand.CommandText = "SELECT * from client WHERE nom <> '' ORDER BY nom;"
            DS = New DataSet("data")
            DA.Fill(DS)
            bt_retablir.Enabled = False
        End If
 
        lb_Clients.DataSource = DS.Tables(0)
        lb_Clients.DisplayMember = "Nom"