J’aime pas le monde qui chiale contre leur job. Il y a toujours des bouts plates dans une job, je trouve ça inutile de focuser sur les aspects négatifs. Mais d’un autre côté, je pense que c’est pas bon de tout garder en dedans. Ça fait maintenant un an que je fais de la maintenance sur une application en particulier. C’est de loin le pire code que j’ai vu de ma vie. J’ai fait un potpourri des éléments les plus savoureux que j’ai trouvés durant cette année.

Database1.Open;
Database1.Close;
Delay(2);
Database1.Open;

Pourquoi faire ça? Je le sais pas. Je sais que c’est mal par contre. Ok, c’est une base de données Access en dessous de ça alors peut-être que ça évite un bug bizarre. Fine! Des fois c’est mieux de pas trop perdre de temps même si la solution est pas jolie. Dans ce temps là, on écrit un commentaire pour dire qu’on le sait que c’est cave, pourquoi on le fait et on essaye d’éviter de le faire 14 fois dans le logiciel. Est-ce que j’ai mentionné aussi que ça serait bien de renommer Database1?

Form1.Memo1.Lines.SaveToFile(Copy(Application.ExeName,1,3)+'\log.txt');

Il y a bien des affaires à dire sur cette ligne de code, mais j’attire votre attention sur le bout en gras qui extrait les 3 premiers caractères du fichier présentement exécuter. On obtient donc la lettre du lecteur suivi de “:\”. Plus souvent qu’autrement on obtient “c:\”. Ahh ça fonctionne, mais la fonction de Delphi ExtractFileDrive aussi est sympathique. Une question de choix j’imagine.

Une mention aussi pour copy(strPath, 1, length(strPath)-12) qui prend les 3 derniers caractères soit l’extension du fichier. Un autre solide rival pour la fonction Delphi ExtractFileExt. En prime, ExtractFileExt fonctionne quand même si le nom du fichier de la base de données n’a pas exactement 12 caractères! J’ai évidemment trouvé ce joyaux en utilisant un base de données de test.. j’imagine que ça non plus ça ne faisait pas partie des pratiques du temps.

if ( (CheckBox17.Checked) or (CheckBox15.Checked) or (CheckBox19.Checked) or
(CheckBox18.Checked) or (CheckBox11.Checked) or (CheckBox21.Checked) or
(CheckBox22.Checked) or (CheckBox23.Checked) or (CheckBox24.Checked) or
(CheckBox27.Checked) or (CheckBox30.Checked) or (CheckBox39.Checked) or (CheckBox49.Checked) or
(CheckBox151.Checked) or (CheckBox152.Checked) or (CheckBox153.Checked) or (CheckBox154
.Checked) or (CheckBox155
.Checked) or (CheckBox156.Checked) or (CheckBox157.Checked)) and (not TexteIndTexte) then

Dans ce cas là, pour savoir quand le code qui suit va être exécuté, il faut aller voir sur toutes les Checkbox et lire le texte dessus. Ce qui est vraiment plaisant avec Delphi 3 (Copyright 1997!), c’est quand mode débogage il n’est pas possible de consulter la liste de composante sur la fenêtre. Il faut donc terminer le programme, lire tout ça et relancer…

fenetre-query

La première fois que j’ai ouvert le projet et que j’ai vu ça, j’ai eu peur, très peur. Je me rappelle des débats avec des amis. Est-ce qu’on doit mettre une composante TQuery directement sur la fenêtre ou bien l’a créer dynamiquement. Je me rappelle pas avoir eu à débattre à savoir si on devrait en mettre 126 sur une fenêtre. Pour ajouter au charme, on a pas cru bon renommer ceux-ci. Avec les Query1 à Query126, c’est un plaisir de lire du code comme ceci :

if Form2.Query34NOFACTURE.AsString <> '' then
Form2.Query55.ParamByName('NOFACTURE').AsString := Form1.Table24NOFACTURE.Value;

Un peu comme les CheckBox, il faut aller voir le SQL de chaque Query pour comprendre d’où ça sort. Oubliez pas de fermer l’application en premier, ça ne fonctionne pas en mode débogage!

La fenêtre de login fantôme

L’autre jour, un utilisateur vient me voir parce qu’il y a un message “Fichier introuvable” lorsqu’il se connecte au démarrage de l’application, juste après avoir tapé son nom d’utilisateur et mot de passe. Comme les noms de fenêtre sont faits d’acronymes incompréhensibles, je décide de toutes les ouvrir pour les refermer une à une tant que je tombe pas sur la fenêtre de connexion. Après avoir fermer la dernière fenêtre.. j’étais un peu troublé. Je recommence, j’ai dû dormir sur la switch : non, toujours rien. Comme je dois m’attendre à ce que les boites pour entre le nom d’usager et mot de passe s’appelle Edit124 et Edit125, je ne peux pas vraiment essayé de faire une recherche. Voici ce que j’ai finalement trouvé :

procedure TForm1.FormShow(Sender: TObject);
begin
TForm1.Height := 166;
TForm1.Width := 389;
DBNavigator1.Visible := False;
SpeedButton2.Visible := False;
SpeedButton3.Visible := False;
PageControl1.Visible := False;
Label1.Visible := False;
DBLookupComboBox1.Visible := False; // C'était pas Edit124 finalement
DBLookupComboBox7.SetFocus;
end;

Pourquoi faire une fenêtre de connexion quand on peut tout simplement redimensionner la fenêtre principale au démarrage et rendre invisible tout ce qui s’y trouve sauf l’endroit où on entre notre nom d’usager et mot de passe? Que de mémoire sauvée!

Je pourrais malheureusement continuer comme ça pendant très longtemps. Le plus tordu c’est que je dois dire que j’aime bien mon travail. J’aime les défis et travailler sur un logiciel du genre, j’ai pas besoin de vous dire que c’en est tout un! Partagez-moi vos commentaires, mots d’encouragement ou encore faites un don pour la santé mentale de mon moi-même.

7 Responses to “Un TQuery c’est bien mais 126 c’est mieux”

Benoît Pruneau

2009-02-24 - 12:37 pm

C’est de la programmation faite par un gars qui est allergique à la documentation…

Je suis en PHP, et quand je code, je vais régulièrement sur http://php.net … parce que je veux que le code que je fais soit écrit correctement dès le départ. Moins tu revisites ton code, mieux c’est…

De plus, c’est toujours bien de faire le tour des fonctions proposées par le langage, même si on ne s’en servira pas tout de suite, parce que ça permet de découvrir en quoi le langage se spécialise (appels http? contrôle à distance? traitement de photos?), on sait jamais quand ça peut servir!

David C

2009-02-24 - 2:51 pm

Je croyais pas que c’était si terrible.
Je vois maintenant le vieux soft vb que je maintiens d’un oeil tellement différent…!

Frank

2009-04-01 - 6:54 pm

Emile, je suis ton ami… alors tu dois m’écouter. Plus rien existe autre toi, ton écran et ce que tu t’apprêtes à lire : Sauve toi!

Sérieusement, sur 100 programmeurs, il y en a 0.4 qui savent ce qu’ils font. Le gros responsable de ce désastre? Les RAD comme Delphi, VB mais surtout VBA.

Emile

2009-04-01 - 8:02 pm

T’oublies TELLEMENT Access dans ta liste! Je comprends ce que tu veux dire mais bon.. c’est pas mauvais de rendre les outils plus conviviaux. C’est clair qu’il y a un effet pervers (voir la capture d’écran ci-haut) mais.. ah pis j’aime ben trop Delphi pour être objectif!

Je le prenne comme un défi. Je réécris les trucs, petits bouts par petits bouts. Quand j’ai une modification à faire dans un “module”, je ratisse plus large et j’essaye d’améliorer le plus que je peux. Ce qui est triste c’est que je peux pas juste renommé les TQuery parce qu’on a aussi eu la bonne idée d’utiliser le TQuery d’une fenêtre à l’autre. Exemple dans la Form2 (ehh oui), tu peux tomber sur TQuery23ID.Value = Form1.TQuery44ID.Value;

C’est un exercice de refactorisation olympien!

Frank

2009-04-01 - 10:15 pm

Le principe de Delphi… avec les TQuery et les autres “components” que tu “drag&drop” sur une “form”, tu trouves pas ça un peu ordinaire en 2009? Je suis convaincu que tu es crissement une bête en Delphi… tellement que je pense que tu dois être le meilleur programmeur Delphi du québec. Mais en même temps je pense que tu es mûr pour lâcher la programmation structurée et événementielle Win32.

Je respecte sincèrement le fait que tu aimes Delphi à ce point, mais j’aimerais pas mal plus savoir qu’un gars avec ton talent se démène autant dans les nouvelles technologies.

Ce message était bourré d’opinions, veuillez ne pas trop en tenir compte.

Emile

2009-04-02 - 3:21 pm

Je suis démasqué, je suis effectivement le meilleur programmeur Delphi du Québec. Facile quand on est le dernier! Je vais te dire, quand j’ai fait un contrat chez Cascades j’ai rencontré du monde calé en taboire en Delphi. Heureusement Kingsey Falls est tellement profond dans les terres que je crois que c’est pratiquement pas dans les limites du Québec.

Je me suis intéressé aux langages dynamiques et au Web au courant des 2 dernières années. Ça m’a donné une vision différente et ça a influencé beaucoup ma façon de programmer Win32. Par contre, dans un environnement comme celui que je présente là où c’est même pas possible de refaire le code à neuf en changeant même pas de langage, c’est impensable de changer de Win32 au Web. Les logiciels sur lesquels je travaille convertissent des dessins Autocad en DXF et les analyses.. en Web? Pas certain.

Frank

2009-04-02 - 3:42 pm

Ouin, j’avoue que j’ai pas trop pensé au type d’application que tu faisais. Je parlais un peu en général.

En fait, juste de voir cette form a réanimé d’atroces souvenirs dans ma mémoire. C’est pour ça que j’ai un peu paniqué.

Laisser un commentaire