Aller au contenu

CPF4812

Il reste des enregistrements dans la mémoire tampon en entrée. (C I)

Gravité 30 · Erreur grave

Cause

Le fichier a été ouvert en lecture seule avec SEQONLY(*YES N), où N est supérieur à 1. Il reste encore des enregistrements à extraire de la mémoire tampon de lecture d'enregistrements groupés. L'entrée ou la modification de la fin des données tentée est incorrecte.

Que faire

Procédez de l'une des façons suivantes, puis renouvelez votre demande :

  • Lancez une opération de lecture des enregistrements restants dans le bloc.
  • Indiquez le paramètre SEQONLY(*NO) dans la commande OVRDBF (Substituer un fichier base de données) avant d'exécuter le programme d'application contenant l'opération de modification de la fin des données.

Réponses possibles

RéponseEffet
CAnnuler la demande.
IIgnorer la demande et continuer.

Description technique

Lorsqu'un fichier a été ouvert en entrée seulement avec SEQONLY(*YES N), N étant supérieur à 1, les enregistrements sont lus dans une mémoire tampon puis peuvent être utilisés par un programme d'application un enregistrement à la fois. La position réelle dans le fichier se trouve sur le dernier enregistrement du bloc, mais le programme d'application ne voit pas la position comme étant celle du dernier enregistrement du bloc. Par conséquent, l'opération de fin de données en entrée ou en modification ne peut pas terminer son traitement tant qu'il reste des enregistrements dans la mémoire tampon de lecture par blocs.

When a file has been opened for input only SEQONLY(*YES N) with N greater than 1 specified, records are read into a buffer and then may be used by an application program one record at a time. The actual position in the file is at the last record in the block, but the application program does not see the position as the last record in the block. Therefore, the input or change end-of-data operation cannot complete processing when records remain in the blocked get-record buffer.

Message d'interrogation

Ce message attend une réponse de l'opérateur, par défaut C. Réponses acceptées : C, I.

Sur votre IBM i

Afficher la description complète du message :

DSPMSGD RANGE(CPF4812) MSGF(QSYS/QCPFMSG)

L'intercepter dans un programme CL, quand il est envoyé comme message d'échappement :

MONMSG MSGID(CPF4812) EXEC(DO)
  /* traitement de l'erreur */
ENDDO