S'il est prévu d'effectuer des calculs sur les dates, il vaut mieux vérifier l'indicateur null. Mathématiquement parlant, les dates nulles contiennent 01/01/0001, ce qui risque de ne pas produire les résultats escomptés. Ainsi, la ligne de code suivante calcule le nombre de jours entre une date de début (STRDAT) et
Calculs avec des champs potentiellement nuls
une date de fin
(ENDDAT), en plaçant le résultat dans un champ appelé DIFF :
C ENDDAT SubDur STRDAT DIFF:*Days
Tout va bien jusqu’à ce que ENDDAT contienne une date nulle, auquel cas DIFF aboutit
à un grand nombre négatif. Par exemple, si on utilise une valeur STRDAT au 4 septembre
1998 et une valeur ENDDAT nulle, la différence (DIFF) sera de -729635. La situation
ressemble à celle de la division, dans laquelle il faut d’abord vérifier si le
diviseur est égal à zéro et agir en conséquence.
La figure 8a présente un exemple qui, en cas de date nulle, met DIFF à zéro. Bien
que cette solution fonctionne, elle est techniquement incorrecte et sert à illustrer
la différence entre zéro et null. Nous disons qu’une date de fin nulle produit
une différence de 0 jours mais, en réalité, nous admettons que nous ne pouvons
pas donner une différence, ne connaissant pas encore la date de fin. Quand les
dates de début et de fin sont identiques, nous prenons la partie Else de l’instruction
If, effectuons le calcul mathématique… et aboutissons à une différence de 0
jour. Dans ce cas, zéro prend sa signification exacte : il n’y a pas de différence
entre les dates de début et de fin.
Cette méthode risque d’entraîner des problèmes si l’on utilise le champ DIFF pour
prendre des décisions ultérieurement. Si par exemple on recherche des contrats
ouverts en testant une valeur zéro dans DIFF, on obtient le résultat souhaité,
mais aussi d’éventuels contrats terminés le jour même de leur démarrage. Selon
l’application, cela peut poser ou non un problème mais montre bien qu’il faut
s’efforcer de prévoir toutes les futures utilisations des données.
La bonne solution consiste à permettre à DIFF de contenir des valeurs nulles,
en ajoutant le mot clé ALWNULL à la définition DDS du champ et en rendant sa valeur
nulle au lieu de 0 quand ENDDAT est null. Cette solution crée une correspondance
de un à un entre le champ DIFF et une situation de gestion réelle : un DIFF null
signe un contrat ouvert, tandis qu’un DIFF à 0 signe un contrat fermé (… et
bref). La figure 8b contient le code à cet effet.
Téléchargez cette ressource
Plan de sécurité Microsoft 365
Les attaquants savent comment prendre le contrôle de votre tenant Microsoft 365, et vous, savez-vous comment le reprendre en main ?
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Les marchés publics peuvent-ils encore faire émerger des champions numériques français ?
- ESET accélère en France et mise sur l’IA face à la montée des cybermenaces
- Souveraineté des données : cessons de traiter le symptôme, attaquons-nous aux causes
- Asys accélère sur la planification intelligente avec l’acquisition de m-work
Articles les + lus
Computex 2026 : 5 signaux forts à retenir
La chaîne d’approvisionnement, point de rupture récurent du SI
Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
Rhea1 : SiPearl allume le CPU européen le plus ambitieux pour le HPC et l’IA souveraine
Analyse Patch Tuesday Mai 2026
À la une de la chaîne Tech
- Computex 2026 : 5 signaux forts à retenir
- La chaîne d’approvisionnement, point de rupture récurent du SI
- Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
- Rhea1 : SiPearl allume le CPU européen le plus ambitieux pour le HPC et l’IA souveraine
- Analyse Patch Tuesday Mai 2026
