> Tech > Lecture du fichier base de données

Lecture du fichier base de données

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

La lecture d'un fichier base de données en CL est simple et directe. Seule complication : la nécessité d'une boucle de programme pour traiter les enregistrements un à  un à  partir du fichier, sachant que CL ne supporte pas directement des opérations structurées comme Do-While ou Do-Until. Toutefois, CL offre

Lecture du fichier base de données

la commande GoTo
primitive et vous permet de placer des
labels dans le code. Ces deux moyens
permettent d’écrire la boucle nécessaire.

La figure 2 montre une partie d’un
programme chargé de traiter le fichier
TestPF. On remarquera la boucle
manuelle permettant de renvoyer
au label ReadBegin et de traiter l’enregistrement suivant dans le fichier.
Au premier passage dans la
boucle, la commande RcvF ouvre le fichier
et traite le premier enregistrement.
La boucle continue jusqu’à  ce que l’instruction RcvF fasse envoyer au
système le message d’erreur « CPF0864
End of file detected ». Quand la commande
MonMsg (Monitor Message) intercepte
ce message, le contrôle saute à  ReadEnd, ce qui termine la boucle.

Contrairement aux HLL, CL ne
vous permet pas de repositionner le fichier
pour poursuivre le traitement,
une fois que le programme a reçu un
message end-of-file (fin de fichier).
Vous pouvez bien sûr exécuter une
commande OvrDbF contenant un paramètre
Position après que votre programme
ait reçu un message end-offile,
mais toute commande RcvF qui en
découle choisit simplement un autre
message end-of-file. Ce problème potentiel
peut être contourné de deux
manières, chacune avec sa propre restriction.

Vous pouvez utiliser le premier
contournement si, et seulement si,
vous pouvez assurer que les données
du fichier resteront statiques pendant
la durée des cycles de lecture. La technique
implique l’utilisation de la commande
RtvMbrD (Retrieve Member
Description). En utilisant le paramètre
NbrCurRcd (variable CL pour NBRCURRCD)
de cette commande, vous
pouvez extraire dans une variable de
programme le nombre d’enregistrements
actuellement présents dans le fichier.
Ensuite, dans la boucle chargée
de lire les enregistrements, vous pourrez
utiliser une autre variable pour
compter le nombre d’enregistrements
lus, en le comparant au nombre d’enregistrements
actuellement dans le fichier.
Quand les deux nombres sont
égaux, le programme a lu le dernier enregistrement
du fichier.

Bien que le programme ait lu le
dernier enregistrement, la condition
end-of-file (fin de fichier) n’est pas encore
établie. Le système établit cette
condition et émet le message CPF0864
indiquant end-of-file uniquement
après avoir tenté de lire un enregistrement
au-delà  du dernier enregistrement.
Cette technique permet donc
d’éviter la condition end-of-file. Vous
pouvez ensuite utiliser la commande
PosDbF (Position Database File) pour
ramener le curseur du fichier au début
du fichier. Indiquez simplement *Start
pour le paramètre Position et vous pouvez lire le fichier à  nouveau !
N’oubliez pas que vous ne pouvez utiliser
cette technique que si vous êtes
certain que les données ne subiront
aucune modification pendant la lecture
du fichier.

Le deuxième procédé de contournement
est encore plus délicat parce
qu’il demande de planifier quelque
peu le modèle de l’application. Soit un
programme CL simple qui ne fait rien
d’autre que d’exécuter une boucle qui
lit tous les enregistrements d’un fichier
base de données et sort en présence
de la condition end-of-file (c’est-à -dire
quand le système émet le message
CPF0864). Si vous remplacez l’instruction

MonMsg (CPFà˜864) Exec(GoTo End)

par
MonMsg (CPFà˜864) Exec(Do)
If (&Stop *Eq 'Y') GoTo End
ChgVar &Stop ('Y')
TfrCtl Pgm(VotrePgm) Parm(&Stop)
EndDo

où VotrePgm est le nom du programme
contenant la commande, le
système redémarre le programme, relisant
du même coup le fichier. Avec
cette technique, il faut ajouter du code
au programme pour empêcher une
boucle sans fin. Outre les changements
montrés ci-dessus, le programme doit accepter le paramètre &Stop. Faute
d'ajouter ces groupes de codes,
chaque fois que le système détectera
end-of-file, le processus redémarrera.
Il faut aussi ajouter du code pour que
seules s'exécutent les parties du code
que l'on souhaite exécuter.

Dans la mesure du possible, si vous
devez lire plusieurs fois un fichier base
de données, il vaut mieux construire
l'application de manière à  pouvoir appeler
des programmes CL multiples
(ou un programme plusieurs fois, selon
le cas). Chacun de ces programmes
(ou instances d'un programme) peut
ensuite traiter le fichier une fois. Cette
méthode est la plus claire et la moins
sujette à  erreur.

Téléchargez cette ressource

Préparer l’entreprise à l’IA et aux technologies interconnectées

Préparer l’entreprise à l’IA et aux technologies interconnectées

Avec la « quatrième révolution industrielle », les environnements hyperconnectés entraînent de nouveaux risques en matière de sécurité. Découvrez, dans ce guide Kaspersky, comment faire face à cette nouvelle ère de vulnérabilité.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010