VB.NET DataGridView. Comment détruire la dernière rangée ? (suite et fin ?)

Problématique

Vous alimentez par programme une DataGridView. J’entends par là que vous ne l’avez pas reliée à une source de données. Vous avez tout bien ajusté pour que la DataGridView ne fasse pas apparaître la ligne vide qui permet les ajouts manuels mais qui dans votre cas fait vraiment moche.

Pour détruire une ligne quelconque, tout va bien. Mais si vous voulez détruire la dernière ligne, VB.NET vous renvoie le message d’exception

Impossible de supprimer la nouvelle ligne non validée

Dans un précédent post du 28 mai, je proposais une solution mais elle ne me plaisait pas (j’ai laissé le post : il faut reconnaître ses faiblesses). Mais je me suis remis à chercher la solution à ce problème.

Je n’aime pas dire ça mais devant l’abondante littérature des forums à ce sujet, erronée au point que c’en est drôle, j’ai vraiment essayé de lire le MSDN Microsoft sur les énigmes du RemoveAt. Et il me semble bien qu’aussi clairement que Microsoft peut l’écrire (vous voyez ce que je veux dire …) que ce n’est pas possible. Mais j’ai assez perdu de temps sur ce truc.

Alors j’ai trouvé un solution simple et qui fonctionne bien. Et, somme toute, assez élégante.

Solution

Vous voulez supprimer la dernière ligne et vous ne réussissez pas ? Deux cas se présentent :

  1. c’est la dernière et la seule. Vous videz le tableau et vous faites ce qu’il y a faire dans ce cas-là : le remplir à nouveau ou sortir du formulaire. Et hop ! on n’en parle plus
  2. VB.NET ne veut pas supprimer la dernière ligne ? Qu’à cela ne tienne, ce n’est pas un petit VB.NET qui va nous arrêter : vous recopiez l’avant-dernière ligne dans la dernière et vous détruisez l’avant-dernière ligne. Ce qui donne quelque chose du genre :

With grdBooks

row = .CurrentRow.Index

If row = .Rows.Count – 1 Then

.Rows(row).Cells(« col1 »).Value = .Rows(row-1).Cells(« col1 »).Value

.Rows(row).Cells(« col2 »).Value = .Rows(row-1).Cells(« col2 »).Value

.Rows(row).Cells(« coln »).Value = .Rows(row-1).Cells(« coln »).Value

.Rows.RemoveAt(row-1)

Else

.Rows.RemoveAt(row)

End If

End With

Et en fin de compte, je suis assez content de moi.

Et si vous voulez savoir comment on sélectionne (et désélectionne), je vous renvoie à mon post du 10 mai.

ET LE TOUR EST JOUÉ ! ALORS ON DIT MERCI QUI ?

Guerre commerciale avec la Chine

L’Europe, pour une fois unie, a décidé de surtaxer les importations de panneaux solaires chinois. La Chine riposte et s’en prend à ses importations de vin.

Peu importe, nous savons fabriquer des panneaux solaires, ils sont juste plus chers. Les Chinois ne sont pas près de savoir faire un Haut-Brion, une Romanée-Conti ou un Château-Yquem.

Quand les Européens, les Français, auront compris que tout a un prix, la qualité en particulier, la Chine ne sera plus qu’un « tigre de papier ».

MySQL. Pister les requêtes lentes

Problématique

Il faut toujours suivre la performance des requêtes d’une base de données. Au début, elle est toute petite et mignonne avec ses 250 entrées et toute requête même la plus lamentable a de bonnes performances. Mais, ouille, six mois après, on est passé à 2500000 entrées et là ça ne va plus du tout. J’exagère ? A peine.

Rien de tel que de mettre en place une surveillance en indiquant à MySQL de vous montrer les requêtes trop lentes par rapport à un seuil que vous pouvez fixer librement.

Solution

Nous avons vu dans les deux posts précédents comment trouver la valeur d’une variable globale et comment la modifier. Croyez-vous que c’était comme ça, pour rire, gratuitement ? Que nenni ! Avec un sens de la pédagogie qui, je le vois bien, vous laisse pantois, les bras ballants, il s’agissait de vous amener doucement à cette petite merveille.

Quatre variables globales sont concernées :

  • slow_query_log : positionné à ON, les requêtes longues sont enregistrées, à OFF elles ne le sont pas. Pour mettre à ON, on modifiera la valeur à 1. Et pour la mettre à OFF on fera comment ? Interro écrite demain matin.
  • slow_query_log_file : fichier de log, sa valeur par défaut est sous Ubuntu /var/run/mysqld/mysqld-slow.log
  • long_query_time : seuil en millisecondes au-delà duquel, vous considérez qu’une requête est trop longue. Sa valeur par défaut est de 10 ms. Je suggère 5 ms si vous voulez faire un examen approfondi quitte à remonter ce plafond ultérieurement
  • min_examined_row_limit : le nombre minimum de lignes que cette requête doit avoir examinées. Par exemple, si vous remontez d’un bloc un million de lignes (ça vous regarde …), il ne faut pas s’attendre à un temps de 0.1 ms. Vous avez déjà optimisé ce type de requête (la meilleure optimisation étant de les éviter), vous ne voulez plus les logger, vous pouvez donc mettre la valeur de cette variable à 500000.

Le plus couramment, on fera le changement suivant

mysql>SET GLOBAL slow_query_log=1;

mysql>SET GLOBAL long_query_time=10;

Et maintenant comment lirons-nous le résultat ? Sous le shell Ubuntu (ou autre), il suffira de taper la commande :

mysqldumpslow -verbose /var/run/mysqld/mysqld-slow.log (si vous n’avez pas changé le nom du fichier de log par défaut)

Ensuite, il n’y a plus qu’à optimiser si nécessaire

ET LE TOUR EST  JOUÉ !ALORS ON DIT MERCI QUI ?

Et pour une formation plus approfondie, une page sur les derniers livres parus sur MySQL sur DerniersParus.com

MySQL. Modifier la valeur d’une variable globale

Problématique

Vous voulez modifier la valeur d’une variable globale. Comment faire ?

Solution

Très simple quand on sait. Dans l’administration de mysql, vous tapez après le prompt mysql>

SET GLOBAL la_variable_a_changer=sa_valeur;

attention, si la variable est locale et que vous oubliez le GLOBAL, MySQL vous préviendra

mais si vous oubliez le « ; » en fin de ligne, vous risquez d’attendre et donc de vous inquiéter en vous demandant ce qui se passe, et donc de faire de l’acidité, et donc d’attraper un ulcère à l’estomac.

Un exemple dans le prochain post

ET LE TOUR EST JOUÉ ! ALORS ON DIT MERCI QUI ?

Et pour une formation plus approfondie, une page sur les derniers livres parus sur MySQL sur DerniersParus.com

MySQL. Afficher les variables globales et leur valeur

Problématique

Vous voulez optimiser vos requêtes MySQL. Pas le choix, c’est obligatoire. Ou modifier le cache des requêtes. Souvent utile. Il faut pour cela modifier ce que MySQL appelle les variables globales.

Première question question : comment trouver leur valeur ?

Solution 1

Dans phpMyAdmin, vous cliquez en haut sur la racine « localhost » et puis sur « Variables » et la liste complète s’affiche.

phpAdminVariables

L’exemple ne vous affiche que les 4 premières variables mais il y en a beaucoup plus. Et comme vous le remarquez, dans la colonne « Documentation », un « ? » vous envoie sur la documentation en ligne de la variable en question.

Donc vous savez comment trouver la valeur d’une variable globale et, ce qui n’est pas négligeable, comment trouver ce qu’elle fait.

Solution 2

Vous allez directement dans l’administration de mysql et après le prompt mysql>  vous tapez :

mysql>SHOW VARIABLES

mais dans ce cas vous n’aurez pas l’explication de la fonction de la variable. Peut-être la connaissez-vous déjà.

ET LE TOUR EST JOUÉ ! ALORS ON DIT MERCI QUI ?

Et pour une formation plus approfondie, une page sur les derniers livres parus sur MySQL sur DerniersParus.com