Code opération RPG III / RPG/400 · IBM i (AS/400) · Écriture et contrôle des fichiers
DELET
Supprimer un enregistrement
Supprime du fichier l'enregistrement qu'on vient de lire, ou celui dont la clé est donnée en facteur 1.
Syntaxe
C DELETformat ER
C cle DELETfichier NRER
- Facteur 1 (18-27)
- Facultatif. Sans lui,
DELETsupprime le dernier enregistrement lu en mise à jour. Avec une clé (zone, constante ouKLIST), il supprime directement l'enregistrement qui porte cette clé, sans lecture préalable. - Facteur 2 (33-42)
- Le format d'enregistrement après une lecture, ou le fichier quand la clé est en facteur 1.
- Indicateurs (54-55)
- Avec une clé en facteur 1 : s'allume quand aucun enregistrement n'a cette clé.
- Indicateurs (56-57)
- Facultatif : s'allume en cas d'erreur (aucune lecture préalable, par exemple). Sans lui, l'erreur arrête le programme.
- Effet
- L'enregistrement n'existe plus dans le fichier : un
CHAINsur sa clé allume l'indicateur « non trouvé ». Les zones du programme gardent leurs valeurs, ce qui permet de recréer l'enregistrement par unWRITE.
À quoi ça sert
DELET retire un client, une ligne de commande ou un article. Deux formes : après une lecture (CHAIN, READ) on supprime l'enregistrement lu ; avec la clé en facteur 1, on supprime sans lire, ce qui évite un aller-retour dans les programmes de purge.
Exemple 1 : Supprimer par la clé
H* DELET : supprimer un enregistrement par sa cle en facteur 1
FCLIENT3WUF E K DISK A
C*
C* On cree d'abord le client 700
C Z-ADD700 NUMCLI
C MOVEL'Test' NOM
C WRITECLI3WR
C*
C* Suppression directe, sans lecture : la cle est en facteur 1
C Z-ADD700 NUMERO 50
C NUMERO DELETCLIENT3W 99
C *IN99 IFEQ '0'
C 'Supprime'DSPLY
C END
C*
C* Seconde suppression : la cle n'existe plus
C NUMERO DELETCLIENT3W 99
C *IN99 IFEQ '1'
C 'Absent' DSPLY
C END
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Supprime
Absent
Le programme crée le client 700 puis le supprime par NUMERO DELET CLIENT3W 99, sans lecture : l'indicateur 99 reste éteint (« Supprime »). La seconde suppression ne trouve plus la clé, 99 s'allume (« Absent »).
Exemple 2 : Supprimer après CHAIN, puis recréer
H* DELET apres CHAIN, puis remise en place avec WRITE
FCLIENT3WUF E K DISK A
C*
C Z-ADD300 NUMERO 50
C NUMERO CHAINCLIENT3W 99
C 99 GOTO FIN
C NOM DSPLY
C DELETCLI3WR
C*
C* Le client 300 n'existe plus
C NUMERO CHAINCLIENT3W 99
C *IN99 IFEQ '1'
C 'Absent' DSPLY
C END
C*
C* Les zones du programme servent a le recreer
C WRITECLI3WR
C NUMERO CHAINCLIENT3W 99
C NOM DSPLY
C FIN TAG
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Leroy SARL
Absent
Leroy SARL
Après le CHAIN du client 300 (Leroy SARL), DELET CLI3WR le supprime ; le CHAIN suivant ne le trouve plus (« Absent »). Les zones étant toujours chargées, un WRITE CLI3WR le recrée à l'identique.
Exemple 3 : DELET sans lecture préalable
H* DELET sans lecture prealable : le programme s'arrete
FCLIENT3WUF E K DISK
C*
C* Aucun CHAIN ni READ n'est execute avant le DELET
C Z-ADD0 NUMERO 50
C NUMERO IFGT 0
C NUMERO CHAINCLIENT3W 99
C END
C 'Avant' DSPLY
C DELETCLI3WR
C 'Apres' DSPLY
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Avant
Erreur : RPG1221 - MAJ ou SUPP sur CLIENT3W sans READ ou CHAIN préalable (C G S D F).
Aucun CHAIN n'est exécuté avant le DELET : le programme s'arrête avec RPG1221, et le « Apres » n'est pas affiché.
Le piège
DELET d'un format sans lecture préalable arrête le programme : RPG1221, « MAJ ou SUPP sur CLIENT3W sans READ ou CHAIN préalable ». Avec un indicateur en 56-57, l'erreur allume l'indicateur au lieu d'arrêter le programme.
La forme avec clé n'a pas besoin de lecture, mais elle vise le fichier (exemple 1), pas le format.
En RPG ILE full free
En RPG ILE full free, DELETE accepte une clé et le résultat se teste avec %FOUND ; sans clé, il supprime l'enregistrement lu.
delete numero client3w;
if not %found(client3w);
dsply 'Absent';
endif;