Ver Mensaje Individual
  #5
Antiguo 30 de julio de 2023, 17:54
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

@Marengo97, te explico.

Tu has hecho un bucle y siempre lees el mismo registro con el contenido de la clave "libro-id". No cambias libro-id. Otra cosa es que cambiaras el valor aumentandolo, pero realmente tendrias lecturas fallidas.

Cuando quieres recorrer un fichero completamente:

1) realiza un start con la clave deseada, para poner el cursor de lectura al principio. Aunque tu lo abres y se supone que esta al principio. Si tuvieras varias claves en el fichero, libro-id, nombre, editorial podrias leer secuencialmente por esa clave. Incluso no desde el principio sino desde un a determinada posicion.
2) read next lee el siguiente por la clave especificada en el start. Cuando llega al final mete un 10 en el file status.

NOTA. Para este bucle de lectura es recomendable hacer un "OPEN INPUT" en vez de "OPEN I-O" porque si hay varios usuarios trabajando te podrias encontrar un registro bloqueado. Entonces la solucion es leer con una apertura "open input" si no tendrias que hacer lecturas con la clausula "with no lock" para no bloquear registros ni encontrartelos bloqueados.

- - - Updated - - -

Metidos en el tema, suponte que deseas seleccionar un intevalo de libros:

accept libro-desde
accept libro-hasta

Código COBOL:
  1. VER-LIBROS.
  2.            PERFORM LIMPIAR-PANTALLA
  3.            PERFORM ABRIR-IO-ARCHIVO
  4.            IF F-NOEXISTE-REG THEN
  5.              PERFORM LIMPIAR-PANTALLA
  6.              DISPLAY "ERROR, NO EXISTE UN ARCHIVO DE REGISTROS" AT LINE 1
  7.                                                            COL 1
  8.                                                            
  9.              DISPLAY "PRESIONE ENTER PARA VOLVER AL MENU()" AT LINE 10
  10.                                                            COL 1
  11.              ACCEPT OPC AT LINE  11 COL 36
  12.            ELSE
  13.                PERFORM LIMPIAR-PANTALLA
  14.  
  15.                move libro desde to  libro-id
  16.                if libro-hasta = 0 then move 999 to libro-hasta end-if
  17.  
  18.                start reg-libros key is >= libro-id end-start
  19.                READ REG-LIBROS next record end-read
  20.  
  21.               PERFORM VARYING N FROM 1 BY 1 UNTIL fin-reg or libro-id  > libro-hasta
  22.                     DISPLAY DATOS-LIBRO AT LINE N COL 1
  23.                     READ REG-LIBROS next record end-read
  24.              END-PERFORM
  25.              ADD 1 TO N
  26.              DISPLAY "PRESIONE ENTER PARA REGRESAR AL MENU" AT LINE N
  27.                                                           COL 1
  28.            ACCEPT OPC AT LINE 15
  29.            PERFORM CERRAR-ARCHIVO
  30.            END-IF.
JCantero is offline   Responder Con Cita