Aller au contenu
Base de données · 2 / 5

L'objet et le membre : ce que contient vraiment un fichier

Sur IBM i, un fichier n'est pas un seul bloc : l'objet porte la description, le membre porte les données. Ce que chacun contient, les commandes de l'un et de l'autre, et pourquoi un fichier peut très bien exister sans aucun membre, démontré avec un Pokédex sur un IBM i 7.5.

1objet *FILE, une description
0 à nmembres, tous au même format
*NONEun fichier peut naître sans membre
SQL0204lire un fichier sans membre

En une phrase

Un fichier base de données est un objet *FILE qui décrit les données (format, attributs, droits) et qui contient zéro, un ou plusieurs membres : chaque membre est un ensemble d'enregistrements, au format du fichier. On crée, sauvegarde et sécurise l'objet ; on remplit, vide et lit le membre.

L'objet et ses membres

IBM définit les membres comme des ensembles de données différents, tous au même format, à l'intérieur d'un même fichier. Voici le Pokédex de notre démonstration : un fichier, deux membres, un par génération.

Bibliothèque, objet fichier, membres, enregistrements La bibliothèque JOBIPOK contient l'objet POKEDEX de type *FILE. L'objet porte la description : le format POKEDEXR avec ses zones, les attributs et les droits. Il contient deux membres, GEN1 et GEN2, qui portent chacun cinq enregistrements : Bulbizarre, Salamèche, Carapuce, Pikachu, Mewtwo pour GEN1, Germignon, Héricendre, Kaiminus, Pichu, Lugia pour GEN2. Bibliothèque JOBIPOK Objet POKEDEX (*FILE, attribut PF)description : format POKEDEXR, zones, attributs, droits Membre GEN15 enregistrements Membre GEN25 enregistrements Bulbizarre, Salamèche…Carapuce, Pikachu, Mewtwo Germignon, Héricendre…Kaiminus, Pichu, Lugia
Un objet, une description ; les données sont dans les membres.
  • L'objet porte ce qui vaut pour tout le fichier : le format d'enregistrement (la liste des zones), les attributs (taille, réutilisation des supprimés, nombre maximal de membres…), le propriétaire et les droits.
  • Le membre porte les enregistrements, et le chemin d'accès qui les ordonne quand le fichier a une clé. Tous les membres d'un fichier partagent le même format.
  • Un membre n'existe pas seul : supprimer le fichier supprime tous ses membres.
  • IBM le rappelle : en règle générale, un fichier n'a qu'un membre, celui créé avec lui, qui porte le même nom que le fichier (CRTPF a ajouté le membre CLIENT au fichier CLIENT, le membre POKEMON au fichier POKEMON).

Des commandes pour l'objet, d'autres pour le membre

Sur l'objet

CRTPF, CRTLF, CRTSRCPFCréer le fichier
DLTFLe supprimer, avec tous ses membres
MOVOBJ, RNMOBJ, CRTDUPOBJLe déplacer, le renommer, le dupliquer
SAVOBJ, RSTOBJLe sauvegarder, le restaurer
GRTOBJAUT, RVKOBJAUTGérer les droits, valables pour tous ses membres
CHGPF, DSPFDChanger ou afficher ses attributs

Sur le membre

ADDPFMAjouter un membre à un fichier physique
RMVM, RNMMEnlever ou renommer un membre
CLRPFMVider un membre de ses enregistrements
RGZPFMRéorganiser un membre (place des supprimés)
DSPPFMAfficher les enregistrements d'un membre
CHGPFMChanger le texte, le type de source d'un membre

Les droits se donnent sur l'objet : GRTOBJAUT … OBJTYPE(*FILE) ouvre ou ferme tous les membres du fichier d'un coup. En SQL, le catalogue QSYS2.SYSPARTITIONSTAT liste les membres (une « partition » par membre) :

SELECT SYSTEM_TABLE_MEMBER, NUMBER_ROWS, PARTITION_TEXT
  FROM QSYS2.SYSPARTITIONSTAT
 WHERE TABLE_SCHEMA = 'JOBIPOK' AND TABLE_NAME = 'POKEDEX'

SYSTEM_TABLE_MEMBER  NUMBER_ROWS  PARTITION_TEXT
GEN1                           5  Generation 1
GEN2                           5  Generation 2

Un fichier peut vivre sans membre

Puisque la description est dans l'objet, rien n'oblige un fichier à avoir des données. Le paramètre MBR(*NONE) de CRTPF crée l'objet seul. Notre Pokédex, décrit ainsi :

     A* Pokedex multi-membre : un membre par generation
     A          R POKEDEXR                  TEXT('Pokedex d''une generation')
     A            NUMPOK         4S 0       COLHDG('No' 'Pokedex')
     A            NOM           12A         COLHDG('Nom')
     A            TYPE1         10A         COLHDG('Type')
     A          K NUMPOK
CRTPF  FILE(JOBIPOK/POKEDEX) SRCFILE(JOBIPOK/QDDSSRC) MBR(*NONE) MAXMBRS(*NOMAX)
CPC7301  Fichier POKEDEX créé dans la bibliothèque JOBIPOK.

Un seul message : l'objet est créé, mais pas de CPC7305 Membre … ajouté. Le fichier existe, on peut afficher sa description, lui donner des droits, le sauvegarder… mais pas le lire : IBM précise qu'il faut au moins un membre avant toute entrée-sortie. En SQL :

SELECT * FROM JOBIPOK.POKEDEX
SQL0204  *FIRST de type *MEM dans *N non trouvé.

SQL cherche le premier membre (*FIRST) et n'en trouve aucun. Il suffit d'en ajouter un :

ADDPFM  FILE(JOBIPOK/POKEDEX) MBR(GEN1) TEXT('Generation 1')
CPC7305  Membre GEN1 ajouté au fichier POKEDEX de JOBIPOK.
La vie d'un fichier créé sans membre CRTPF MBR(*NONE) crée l'objet sans membre : la lecture échoue avec SQL0204. ADDPFM ajoute le membre GEN1 : la lecture fonctionne. RMVM enlève le membre : l'objet reste, sans données. MBR(*NONE)CRTPF : objet seul ADDPFM GEN1objet + membre RMVM GEN1de nouveau seul LectureSQL0204 Lectureles données de GEN1 Lectureplus de membre
L'objet survit à ses membres : les ajouter ou les enlever ne touche pas à sa description.

À quoi sert un fichier sans membre ?

  • Le fichier de référence de zones. C'est l'exemple d'IBM : un PF qui ne contient jamais de données et ne sert qu'à décrire des zones, que les autres fichiers reprennent par les mots-clés REF et REFFLD. IBM le crée avec MBR(*NONE) « parce qu'il ne contient jamais de données ».
  • Le changement de format. Autre exemple d'IBM : pour ajouter une zone, on crée le nouveau fichier avec MBR(*NONE), puis on y copie le membre de l'ancien.
  • Le fichier source neuf. CRTSRCPF crée le fichier sans membre par défaut : chaque source sera un membre, ajouté plus tard (voir les fichiers source).
  • Le fichier dont les membres arrivent plus tard, un par génération, un par mois : c'est le multi-membre, objet de la page suivante.
Un fichier logique a aussi des membres. Chaque CRTLF de notre démonstration a produit un CPC7305 Membre … ajouté : le membre d'un LF ne contient pas de données, il désigne les membres des PF qu'il présente (voir les fichiers logiques).

À retenir

  • L'objet *FILE porte la description ; le membre porte les données.
  • Créer, déplacer, sauvegarder, sécuriser : l'objet. Remplir, vider, réorganiser, lire : le membre.
  • En règle générale, un fichier a un seul membre, du même nom que lui.
  • MBR(*NONE) crée un fichier sans membre : utile pour un fichier de référence ou un fichier source, mais illisible tant qu'on n'a pas fait ADDPFM.

Sources

Les exemples ont été créés et relevés sur un IBM i 7.5 (voir la méthode). Les définitions et les règles viennent de ces sources, consultées le 16 octobre 2026 :

  1. IBM i 7.5 Database : Database programming, IBM (PDF). Définitions du fichier physique, du fichier logique (« contains no data ») et du membre ; un seul membre « en règle générale » et au moins un membre avant toute entrée-sortie ; premier membre choisi selon la date et l'heure de création ; fichier de référence de zones et fichier créé MBR(*NONE) ; attributs des fichiers source (92 = 6 + 6 + 80, sans clé, plusieurs membres) ; LF qui présente l'ancien format ; règles des LF de jointure (lecture seule, pas de DFU, clé du fichier primaire, JDFTVAL, un seul format) ; vu de SQL, LF = vues et index.
  2. L'aide en ligne des commandes citées, livrée avec IBM i 7.5 et reprise en français dans les fiches des commandes CL de ce site. Paramètres de CRTPF, CRTLF, CRTSRCPF, ADDPFM, OVRDBF, UPDDTA, DSPPFM, RGZPFM, CPYF, CRTBNDRPG et CRTBNDCL.

Questions fréquentes

Qu'est-ce qu'un membre sur IBM i ?

Un membre est un ensemble de données à l'intérieur d'un fichier base de données. L'objet *FILE porte la description (format, attributs, droits) ; le membre porte les enregistrements. Tous les membres d'un fichier ont le même format. IBM précise qu'en règle générale, un fichier n'a qu'un membre, créé avec le fichier.

Quelle différence entre un objet et un membre ?

L'objet est ce que l'on crée, déplace, sauvegarde ou sécurise (CRTPF, MOVOBJ, SAVOBJ, GRTOBJAUT). Le membre est ce que l'on remplit, vide, réorganise ou lit (ADDPFM, CLRPFM, RGZPFM, DSPPFM). Un membre n'existe pas en dehors de son fichier.

Un fichier peut-il exister sans membre ?

Oui : CRTPF … MBR(*NONE) crée l'objet sans données. Il faut alors ajouter un membre (ADDPFM) avant toute lecture ou écriture ; en SQL, la lecture échoue avec SQL0204 (*FIRST de type *MEM non trouvé). CRTSRCPF crée d'ailleurs ses fichiers source sans membre par défaut.

À quoi sert un fichier sans membre ?

IBM donne deux exemples : le fichier de référence de zones, qui ne sert qu'à décrire des zones reprises par REF et REFFLD, et le nouveau fichier créé MBR(*NONE) avant d'y copier l'ancien lors d'un changement de format. Un fichier source fraîchement créé, ou un fichier dont les membres seront ajoutés par programme, est aussi sans membre au départ.