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:
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"