Aller au contenu

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, DELET supprime le dernier enregistrement lu en mise à jour. Avec une clé (zone, constante ou KLIST), 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 CHAIN sur sa clé allume l'indicateur « non trouvé ». Les zones du programme gardent leurs valeurs, ce qui permet de recréer l'enregistrement par un WRITE.

À 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;