[SQL + VB.NET] Alléger mon code pour un accès plus rapide
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" |