Archive for the ‘programmaton’ Category

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.