Página 1 de 2 1 2 ÚltimoÚltimo
Resultados 1 al 10 de 18

Tema: No se imprime la base de datos

  1. #1
      Acabo de llegar...
    Avatar de DestinedBroken

    Registrado
    octubre de 2021
    Mensajes
    28
    Última visita
    16.02.2022

    Agradecimientos
     
    Recibidos
    4
    Enviados
    16

    Citaciones y menciones
     
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    0

    Predeterminado No se imprime la base de datos

    Hola comunidad,

    Al igual que introducir registros en una base de datos, he decidido crear un programa que me los imprima. Veo todo correcto, pero no entiendo por qué no se me imprimen bien.

    He probado el Debug y por lo que puedo ver, los atributos de los registros "están corruptos" en el sentido de que no muestra correctamente los campos para cada valor. Como se puede ver a continuación, los valores aparecen cortados:



    Con otra base de datos pruebo y pasa más de lo mismo:


    Adjunto código:

    COBOL Código:
    1.        program-id. BB_DD_2 as "lectura de la BB_DD_".
    2.  
    3.        environment division.
    4.        configuration section.
    5.        input-output section.
    6.        file-control.
    7.        select optional empleados-archivo
    8.            assign to "f:\empleados_escritura.dat"
    9.            organization is line sequential.
    10.  
    11.        data division.
    12.        file section.
    13.        fd empleados-archivo.
    14.        01 empleados-registro.
    15.          05 empleados-id pic x(9).
    16.          05 empleados-nombre pic x(25).
    17.          05 empleados-apellidos pic x(25).
    18.          05 empleados-edad pic x(3).
    19.          05 empleados-telefono pic x(9).
    20.          05 empleados-direccion pic x(35).
    21.  
    22.        working-storage section.
    23.  
    24.        01 FIN-DEL-ARCHIVO PIC X value "1".
    25.        01 MAXIMO-REGISTROS PIC 99 value zeroes.
    26.        01 siguiente PIC X.
    27.  
    28.        procedure division.
    29.        empieza-programa.
    30.            open input empleados-archivo
    31.            perform lee-siguiente-registro
    32.            perform muestra-campos
    33.            perform lee-siguiente-registro
    34.              until fin-del-archivo = "0"
    35.            close empleados-archivo
    36.            stop run
    37.            .
    38.  
    39.        muestra-campos.
    40.            if MAXIMO-REGISTROS = 10
    41.                perform siguiente-pagina
    42.            end-if
    43.            display "ID:" empleados-id
    44.            display "Nombre:" empleados-nombre
    45.            display "Apellidos:" empleados-apellidos
    46.            display "Edad:" empleados-edad
    47.            display "Telefono:" empleados-telefono
    48.            display "Direccion:" empleados-direccion
    49.            
    50.            ADD 1 TO MAXIMO-REGISTROS
    51.            .
    52.  
    53.        lee-siguiente-registro.
    54.            read empleados-archivo next record
    55.                at end
    56.                    move "0" to FIN-DEL-ARCHIVO
    57.            .
    58.        siguiente-pagina.
    59.            display
    60.              "Presiona cualquier tecla para ver la siguiente pagina..."
    61.            accept siguiente
    62.            move zeroes to MAXIMO-REGISTROS
    63.  
    64.        end program BB_DD_2.

    0 Not allowed!

  2. #2
      Senior
    J

    Registrado
    junio de 2016
    Ubicación
    Albacete
    Edad
    57
    Mensajes
    417
    Última visita
    Ayer a las 23:37

    Agradecimientos
     
    Recibidos
    240
    Enviados
    149

    Citaciones y menciones
     
    Mentioned
    52 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    9 Post(s)
    Poder de Reputación
    25
    Activista del Foro / Point Value: 0 Agradecimientos / Point Value: 0

    Predeterminado

    No esta corrupto.

    Tu problema es que en el otro hilo creaste la fd asi:

    COBOL Código:
    1. fd empleados-archivo.
    2.      *label etiqueta-antigua-para-cintas.
    3.        01 empleados-registro.
    4.          05 empleados-id pic x(6).
    5.          05 empleados-nombre pic x(25).
    6.          05 empleados-apellidos pic x(35).
    7.          05 empleados-edad pic x(3).
    8.          05 empleados-telefono pic x(9).
    9.          05 empleados-direccion pic x(35).

    Y ahora lo estas displayando leyendo del fichero con otra estructura

    COBOL Código:
    1.  fd empleados-archivo.
    2.        01 empleados-registro.
    3.          05 empleados-id pic x(9).
    4.          05 empleados-nombre pic x(25).
    5.          05 empleados-apellidos pic x(25).
    6.          05 empleados-edad pic x(3).
    7.          05 empleados-telefono pic x(9).
    8.          05 empleados-direccion pic x(35).

    El "id" inicial tenia x(6) y el de listar pic x(9).

    Te coge los 6 del id inicial + tres caracteres del nombre.

    Y el resto de campos efectos colaterales del error primero de diseño

    Deben de tener la misma estructura.

    0 Not allowed!

  3. #3
      Acabo de llegar...
    Avatar de DestinedBroken

    Registrado
    octubre de 2021
    Mensajes
    28
    Última visita
    16.02.2022

    Agradecimientos
     
    Recibidos
    4
    Enviados
    16

    Citaciones y menciones
     
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    0

    Predeterminado

    Hola, perdón por la demora en responder. Ya estoy de vuelta.
    @JCantero, gracias por el apunte. Ahora no tengo ese problema. Sin embargo, solo consigo que me muestre un registro, y no los 10 (o 5) por página.



    He estado dándole vueltas a la variable de control "maximo-registros", pero creo que funciona bien. Se inicializa a 0 en la Working y se va incrementando de 1 en 1 hasta llegar al tope (10) en la función "muestra-campos". Luego, tengo cuidado de borrarle el contenido en "siguiente-pagina."

    Aprovecho para comentar también que me está rayando que "empleados-registro" (el nombre del archivo lógico) siga tachado, sin invocarlo ni una sola vez...

    0 Not allowed!

  4. #4
      Super Moderador
    Avatar de Josber

    Registrado
    febrero de 2015
    Ubicación
    Alicante
    Mensajes
    797
    Última visita
    Ayer a las 19:53

    Agradecimientos
     
    Recibidos
    440
    Enviados
    362

    Citaciones y menciones
     
    Mentioned
    77 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    13 Post(s)
    Poder de Reputación
    37
    Activista del Foro / Point Value: 0 Agradecimientos / Point Value: 0

    Predeterminado

    A ver, no sé de donde habrás sacado el curso pero, más vale que lo tires a la basura y empieces uno de otro lado, porque éste tiene fallos de estructura de programación así "a puñaos".

    El primero que veo, es la falta de uso del punto (.) para terminar una instrucción o en su caso el uso de un END-instrucción, en éste caso END-PERFORM y END-READ, ponlos en su sitio y quizás te cambie radicalmente la estructura del programa, porque, conforme está, en apariencia funciona bien, pero es como el comunismo, que en apariencia funciona bien, pero luego ...
    Si no sabes donde ponerlos, dilo y te echamos una mano, que todos hemos pasado por ahí

    En tu caso la estructura para hacer el programa es de las sencillas, la secuencia normal sería:

    - (01) Inicializar a 0 la variable MAXIMO-REGISTROS, (que no lo haces)
    - (02) Abrir FICHERO
    - (03) Posicionarse al principio, (algo que no haces, y que en éste caso no sea necesario, por ser un fichero secuencial)
    - (04) Leer fichero
    - (05) Comprobar si es el último registro
    - (06) Sí lo es STOP RUN
    - (07) No lo es
    - (08) Mostrar registro leído
    - (09) Sumar uno a MAXIMO-REGISTROS
    - (10) MAXIMO-REGISTRO = 10
    - (11) Si es SÍ
    - (12) Aceptar tecla para continuar
    - (13) MAXIMO-REGISTROS = 0
    - (14 ) Mostrar en pantalla registro leído
    - (15) Volver al punto (04)

    El punto 01, hazlo siempre porque, aunque en la WORKING, le asignes el valor 0 (cero) a la variable MAXIMO-REGISTROS, hay veces que, por culpa del demonio, falla, es un simple
    COBOL Código:
    1. MOVE 0 TO MAXIMO-REGISTROS.

    Posicionarse al principio del fichero, en éste caso no es obligatorio, porque nada más abrir el fichero, empiezas a leerlo, por lo que el puntero, debe de apuntar al principio del fichero, y además es un fichero secuencial, lo que no entiendo es el por qué lees 2 veces el fichero, se me escapa de la lógica.

    En cuanto a lo de me está rayando que "empleados-registro", no entiendo qué quieres decir con lo de "seguir tachado", en éste caso empleado-registro, no se usa, porque es por decirlo de alguna manera un contenedor de las variables que tiene por debajo, las de nivel 05, por lo que no se invoca para nada, es como si la fiche la dividieses en bloques, por ejemplo un bloque con el nombre y los apellidos, otro bloque con dirección, población CP, etc, otro bloque con varios número de teléfono, etc.

    0 Not allowed!

  5. #5
      Junior
    d

    Registrado
    noviembre de 2018
    Edad
    54
    Mensajes
    45
    Última visita
    Ayer a las 15:48

    Agradecimientos
     
    Recibidos
    12
    Enviados
    15

    Citaciones y menciones
     
    Mentioned
    27 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    0

    Predeterminado

    @DestinedBroken, Hola, de donde has sacado esos ejercicios de COBOL, necesito una pagina o un foro hace tiempo que no programo en COBOL. Tendras el link de los ejercicios.
    Saludos.

    0 Not allowed!

  6. #6
      Acabo de llegar...
    Avatar de DestinedBroken

    Registrado
    octubre de 2021
    Mensajes
    28
    Última visita
    16.02.2022

    Agradecimientos
     
    Recibidos
    4
    Enviados
    16

    Citaciones y menciones
     
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    0

    Predeterminado

    @Josber,

    Cita Iniciado por Josber Ver Mensaje
    es la falta de uso del punto (.) para terminar una instrucción
    Precisamente así vine aquí al comienzo y @Kuk me dijo que con que los pusiera al final de cada bloque era suficiente. Igual lo de poner end-XXX no lo he tenido que usar jamás y no veo su uso obligatorio. Supongo que dependerá del entorno donde trabajes.
    En GNUCobol siempre se ponen puntos (o no, yo qué sé, ese IDE me fallaba mucho), de mientras, en VCobol, no da errores si no los pones de seguido. Solamente he tenido que usar el end-if como sentencia de finalizado para "cláusulas especiales".



    Cita Iniciado por Josber Ver Mensaje
    - (01) Inicializar a 0 la variable MAXIMO-REGISTROS, (que no lo haces)
    Hecho

    Cita Iniciado por Josber Ver Mensaje
    - (02) Abrir FICHERO
    COBOL Código:
    1. open input empleados-archivo
    ya hecho


    Cita Iniciado por Josber Ver Mensaje
    - (03) Posicionarse al principio, (algo que no haces, y que en este caso no sea necesario, por ser un fichero secuencial)
    He buscado información al respecto y como dices, no es necesario en mi caso. Pero no solamente eso, sino que VCobol me tira error al parecer porque estoy utilizando archivos "Secuenciales". Además, no tendría la "key" o clave por la que empezar (aunque supongo que le puedo poner 0 y ya está).


    Cita Iniciado por Josber Ver Mensaje
    - (04) Leer fichero
    COBOL Código:
    1. read empleados-archivo next record
    2.                at end
    3.                    move "0" to FIN-DEL-ARCHIVO
    Eso está en la función "lee-siguiente-registro". Según el manual de "Andrés" (lo pillé de aquí del foro), la estructura está bien. En un manual de IBM me dice que no hace falta poner "next record", en fin, un lío.


    Cita Iniciado por Josber Ver Mensaje
    (05) Comprobar si es el último registro
    ¿Cómo se hace? He buscado, y solo he encontrado lo de "at end" en el read. En verdad, una vez que has leído el fichero ya se supone que has llegado al final.

    He estado debugeando el código y he encontrado que se queda atascado en la sentencia del "read". Es decir, para el primer registro, lo saca correctamente, incrementa en 1 el "maximo-registros", pero no saca por consola el resto de los registros.

    He probado aquí y allá, como intentar sacar los registros de 5 en 5 en vez que de 10 en 10 pero siempre obteniendo los mismos resultados.

    @dariodr, Ya se están mosqueando conmigo por traer problemas por culpa de seguir un curso roto como para pasártelo Lo siguiente es que me baneen, a mí por colgarlo y a ti por seguirlo jajaja.
    Veré por YT si hay algún cursillo free que esté bien explicado. Pero será lo típico de comprar uno en udemy (aunque le leí a un internauta que está muy lioso).

    De aquí mismo he sacado buen material y orientación, lo que pasa es que los libros de programación se me hacen terribles para aprender un lenguaje. Yo soy más de practicar con teclado que leer 100 páginas con millones de explicaciones sobre palabras reservadas y demás.

    0 Not allowed!

  7. #7
      Super Moderador
    Avatar de Josber

    Registrado
    febrero de 2015
    Ubicación
    Alicante
    Mensajes
    797
    Última visita
    Ayer a las 19:53

    Agradecimientos
     
    Recibidos
    440
    Enviados
    362

    Citaciones y menciones
     
    Mentioned
    77 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    13 Post(s)
    Poder de Reputación
    37
    Activista del Foro / Point Value: 0 Agradecimientos / Point Value: 0

    Predeterminado
    ¡Solución!1 usuarios han marcado el post como Solución

    Cita Iniciado por DestinedBroken Ver Mensaje
    Lo siguiente es que me baneen
    Banearte por eso no pero, que el que ha hecho el curso, se merece una buena mano de bofetadas....

    A ver, el END-READ, has de ponerlo, no para que termine de leer, si no, para indicarle que termine de hacer cosas, es como el END-IF, (o el punto en su caso), si no lo pones, el compilador puede presuponer que no se han terminado de hacer cosas y añadirlas en AT END, por ejemplo,

    No es lo mismo

    COBOL Código:
    1. READ fichero
    2.            NEXT RECORD
    3.                       AT END
    4.                             MOVE 0 TO FIN-FICHERO
    5.                       NOT AT END
    6.                                PERFORM MOSTRAR
    7. ADD 20 TO CONTADOR
    8. PERFORM COMPROBAR

    que

    COBOL Código:
    1. READ fichero
    2.            NEXT RECORD
    3.                       AT END
    4.                             MOVE 0 TO FIN-FICHERO
    5.                       NOT AT END
    6.                                PERFORM MOSTRAR
    7. END-READ
    8. ADD 20 TO CONTADOR
    9. PERFORM COMPROBAR

    o el equivalente sin el END-READ, pero con sus correspondientes puntos (.) de fin de sentencia

    COBOL Código:
    1. READ fichero
    2.            NEXT RECORD
    3.                       AT END
    4.                             MOVE 0 TO FIN-FICHERO
    5.                       NOT AT END
    6.                                PERFORM MOSTRAR.
    7. ADD 20 TO CONTADOR.
    8. PERFORM COMPROBAR.

    En el primer caso, suma 20 a CONTADOR y va al párrafo COMPROBAR, mientras haya registros en el fichero, puesto que no encuentra nada que le diga que ha terminado el bloque de instrucciones en el READ, y en el segundo caso, sólo lo hace cuando haya termina de leer el fichero.

    Los puntos y las sentencias END-...., no son obligatorias, pero si son muy esclarecedoras, para los que nos enseñamos COBOL, con la versión del 74, el poder usar un simple END-IF, END-READ o END-algo, fue uno de los mayores hitos en la programación con este lenguaje, si te descargas el manual que hice sobre POWER-COBOL, verás que, en todos los ejemplos que hay, y hay un buen montón, uso siempre las sentencias END, los puntos de fin de instrucción y la INDETANCIÓN, es algo a lo que me he acostumbrado y, ya no sé hacerlo de otra forma.

    Un salu2.-

    0 Not allowed!

  8. #8
      Senior
    J

    Registrado
    junio de 2016
    Ubicación
    Albacete
    Edad
    57
    Mensajes
    417
    Última visita
    Ayer a las 23:37

    Agradecimientos
     
    Recibidos
    240
    Enviados
    149

    Citaciones y menciones
     
    Mentioned
    52 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    9 Post(s)
    Poder de Reputación
    25
    Activista del Foro / Point Value: 0 Agradecimientos / Point Value: 0

    Predeterminado

    @Josber,

    No espantes al personal, encima que le han timado por el curso no metas el dedo en la herida.

    Vamos a intentar ayudarle.


    0 Not allowed!

  9. #9
      Super Moderador
    Avatar de Josber

    Registrado
    febrero de 2015
    Ubicación
    Alicante
    Mensajes
    797
    Última visita
    Ayer a las 19:53

    Agradecimientos
     
    Recibidos
    440
    Enviados
    362

    Citaciones y menciones
     
    Mentioned
    77 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    13 Post(s)
    Poder de Reputación
    37
    Activista del Foro / Point Value: 0 Agradecimientos / Point Value: 0

    Predeterminado

    Cita Iniciado por JCantero Ver Mensaje
    Vamos a intentar ayudarle
    En ello estamos, en ello, esperando a ver si pone los puntos y los END-algo en su sitio y ya le funciona la cosa


    0 Not allowed!

  10. #10
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    39
    Mensajes
    2,287
    Última visita
    Ayer a las 21:23

    Agradecimientos
     
    Recibidos
    1,036
    Enviados
    888

    Citaciones y menciones
     
    Mentioned
    102 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    31 Post(s)
    Poder de Reputación
    10

    Predeterminado

    Cita Iniciado por DestinedBroken Ver Mensaje
    he sacado buen material y orientación
    Mírate el manual el Andrés, nuestro amigo y Guru @Nitzer, que lo puedes encontrar aquí: [Información] COBOL - Por donde empezar desde 0 - COBOL Foro

    Es bastante comprimido, y habla sólo de cosas importantes

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

Página 1 de 2 1 2 ÚltimoÚltimo

Información de Tema

Usuarios Viendo este Tema

Actualmente hay 1 usuarios viendo este tema. (0 miembros y 1 visitantes)

Temas Similares

  1. [Información] I/O Error al ejecutar una base de datos
    Por DestinedBroken en el foro Visual Cobol
    Respuestas: 11
    Último Mensaje: 02.02.2022, 11:13
  2. [Sintaxis] URGENTE: Base de Datos en MySql en Red
    Por Hrmcobol en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 10
    Último Mensaje: 21.08.2021, 15:30
  3. Base de datos .mdb
    Por Lobosauseda en el foro Bases de datos
    Respuestas: 4
    Último Mensaje: 26.08.2019, 09:36
  4. [Sintaxis] Abrir o visualizar Base de datos Cobol
    Por Anuack en el foro COBOL - General
    Respuestas: 0
    Último Mensaje: 11.07.2017, 11:08
  5. [Sintaxis] Ayuda para interactuar con base de Datos
    Por Breew en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 19
    Último Mensaje: 28.01.2016, 22:46

Marcadores

Marcadores

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •