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

Tema: I/O Error al ejecutar una 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
    2 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    0

    Predeterminado I/O Error al ejecutar una base de datos

    Hola comunidad,

    Estoy empezando a trabajar con bases de datos en Cobol y este es mi primer ejercicio. Es muy sencillo. Solamente se le pide al usuario que rellene una serie de campos para introducir una persona con sus atributos en un registro de la base. Lo extraño del código es que funcionar, funciona todo bien. Me introduce correctamente todo, pero al final, cuando le digo que no quiero seguir con el programa, es cuando me tira el error:



    El código:

    COBOL Código:
    1.        program-id. create-files as "primero bases de datos".
    2.  
    3.        environment division.
    4.        configuration section.
    5.        input-output section.
    6.  
    7.        file-control.
    8.        select optional empleados-archivo
    9.            assign to "f:\empleados.dat"
    10.            organization is line sequential.
    11.  
    12.        data division.
    13.        file section.
    14.        fd empleados-archivo.
    15.      *label etiqueta-antigua-para-cintas.
    16.        01 empleados-registro.
    17.          05 empleados-id pic x(6).
    18.          05 empleados-nombre pic x(25).
    19.          05 empleados-apellidos pic x(35).
    20.          05 empleados-edad pic x(3).
    21.          05 empleados-telefono pic x(9).
    22.          05 empleados-direccion pic x(35).
    23.  
    24.        working-storage section.
    25.        01 identificador pic x(36) value
    26.       -"Introduce un ID del nuevo empleado: ".
    27.        01 nombre pic x(33) value "Introduce un nombre de empleado:".
    28.        01 apellidos pic x(25) value "Introduce los apellidos:".
    29.        01 edad pic x(19) value "Introduce la edad:".
    30.        01 telefono pic x(33) value "Introduce un numero de telefono:".
    31.        01 direccion pic x(25) value "Introduce una direccion:".
    32.  
    33.        01 si-no pic x.
    34.        01 entrada pic x.
    35.  
    36.        procedure division.
    37.  
    38.        program-begin.
    39.            perform procedimiento-de-apertura
    40.            move "s" to si-no
    41.            perform agregar-registros
    42.              until si-no = "n"
    43.            perform procedimiento-de-cierre
    44.  
    45.            .
    46.  
    47.        procedimiento-de-apertura.
    48.            open extend empleados-archivo
    49.            .
    50.  
    51.        procedimiento-de-cierre.
    52.            close empleados-archivo
    53.            .
    54.  
    55.        agregar-registros.
    56.            move "n" to si-no
    57.            perform obtener-campos
    58.              until entrada = "s"
    59.            perform escribir-registro
    60.            perform reiniciar
    61.            .
    62.  
    63.        obtener-campos.
    64.            move space to empleados-registro
    65.            display identificador
    66.            accept empleados-id
    67.            display nombre
    68.            accept empleados-nombre
    69.            display apellidos
    70.            accept empleados-apellidos
    71.            display edad
    72.            accept empleados-edad
    73.            display telefono
    74.            accept empleados-telefono
    75.            display direccion
    76.            accept empleados-direccion
    77.            perform continuar
    78.  
    79.            .
    80.  
    81.        continuar.
    82.            move "s" to entrada
    83.            if empleados-nombre = space
    84.                move "n" to entrada
    85.            end-if
    86.            .
    87.  
    88.        escribir-registro.
    89.            write empleados-registro
    90.            .
    91.  
    92.        reiniciar.
    93.            display "Almacenar otro registro en la base de datos (s/n)??"
    94.            accept si-no
    95.            if si-no = "s"
    96.                move "s" to si-no
    97.            end-if
    98.            if si-no not = "s"
    99.                move "n" to si-no
    100.            end-if
    101.            .
    102.  
    103.        end program create-files.

    0 Not allowed!

  2. #2
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    37
    Mensajes
    2,088
    Última visita
    Ayer a las 15:47

    Agradecimientos
     
    Recibidos
    908
    Enviados
    784

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

    Predeterminado

    @DestinedBroken, hola amigo. Por lo pronto esto lo tendrás que modificar porque sinceramente no vale:

    COBOL Código:
    1.            if si-no = "s"
    2.                move "s" to si-no
    3.            end-if
    4.            if si-no not = "s"
    5.                move "n" to si-no
    6.            end-if

    Fíjate en el primer MOVE, piensa en el ELSE....

    Luego por lo del error, me parece que es el momento de que uses el Debug, verás que chollo. Te muestra el contenido de los campos, puedes seguir la ejecución sentencia por sentencia.

    Si aún encuentras dificultades, dímelo y te doy más pistas

    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.

  3. #3
      Guardián del Foro
    Avatar de Fito

    Registrado
    febrero de 2015
    Ubicación
    Córdoba, Villa María
    Edad
    51
    Mensajes
    350
    Última visita
    Hoy a las 15:21

    Agradecimientos
     
    Recibidos
    184
    Enviados
    186

    Citaciones y menciones
     
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    24
    Agradecimientos / Point Value: 0 Guardián del Foro / Point Value: 0 Activista del Foro / Point Value: 0

    Predeterminado

    Holaaaa:

    Te está faltando el STOP RUN, después que corres la rutina de cierre. Porque sigue ejecutando las líneas de abajo.

    Saludos

    Fito...

    0 Not allowed!

  4. #4
      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
    2 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    0

    Predeterminado

    @Fito, Esta es una de las cosas que me he dado cuenta. Gracias compañero.

    @Kuk, Paso a poner mi código mejorado. He quitado muchas cosas que no tenían sentido. Como rutinas de solo una línea de código. El trozo de código del if-else también lo he cambiado. Creo que ahora está mejor.

    El problema está resuelto, pero no funciona cuando quiero meter más personas en la base de datos. Me explico:


    COBOL Código:
    1.        program-id. create-files as "primero bases de datos".
    2.  
    3.        environment division.
    4.        configuration section.
    5.        input-output section.
    6.  
    7.        file-control.
    8.        select optional empleados-archivo
    9.            assign to "f:\empleados_escritura.dat"
    10.            organization is line sequential.
    11.  
    12.        data division.
    13.        file section.
    14.        fd empleados-archivo.
    15.      *label etiqueta-antigua-para-cintas.
    16.        01 empleados-registro.
    17.          05 empleados-id pic x(6).
    18.          05 empleados-nombre pic x(25).
    19.          05 empleados-apellidos pic x(35).
    20.          05 empleados-edad pic x(3).
    21.          05 empleados-telefono pic x(9).
    22.          05 empleados-direccion pic x(35).
    23.  
    24.        working-storage section.
    25.        01 identificador pic x(36) value
    26.       -"Introduce un ID del nuevo empleado: ".
    27.        01 nombre pic x(33) value "Introduce un nombre de empleado:".
    28.        01 apellidos pic x(25) value "Introduce los apellidos:".
    29.        01 edad pic x(19) value "Introduce la edad:".
    30.        01 telefono pic x(33) value "Introduce un numero de telefono:".
    31.        01 direccion pic x(25) value "Introduce una direccion:".
    32.  
    33.        01 si-no pic x.
    34.        01 entrada pic x.
    35.  
    36.        procedure division.
    37.  
    38.        program-begin.
    39.            open extend empleados-archivo
    40.      *    move "s" to si-no
    41.            perform agregar-registros until si-no = "n"
    42.            close empleados-archivo
    43.            stop run
    44.  
    45.            .
    46.        agregar-registros.
    47.      *    move "n" to si-no
    48.            perform obtener-campos until entrada = "s"
    49.            write empleados-registro
    50.            perform reiniciar
    51.            .
    52.  
    53.        obtener-campos.
    54.            move space to empleados-registro
    55.            display identificador
    56.            accept empleados-id
    57.            display nombre
    58.            accept empleados-nombre
    59.            display apellidos
    60.            accept empleados-apellidos
    61.            display edad
    62.            accept empleados-edad
    63.            display telefono
    64.            accept empleados-telefono
    65.            display direccion
    66.            accept empleados-direccion
    67.            perform continuar
    68.  
    69.            .
    70.  
    71.        continuar.
    72.            move "s" to entrada
    73.            if empleados-nombre = space
    74.                display
    75.                "ERROR: No ha introducido un nombre para el empleado,"
    76.       -       "vuelva a intentarlo"
    77.  
    78.                move "n" to entrada
    79.            end-if
    80.            .
    81.  
    82.        reiniciar.
    83.            display "Almacenar otro registro en la base de datos (s/n)??"
    84.            accept si-no
    85.            if si-no = "s"
    86.                move "s" to si-no
    87.  
    88.            else
    89.                move "n" to si-no
    90.            end-if
    91.  
    92.            .
    93.  
    94.        end program create-files.

    0 Not allowed!

  5. #5
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    37
    Mensajes
    2,088
    Última visita
    Ayer a las 15:47

    Agradecimientos
     
    Recibidos
    908
    Enviados
    784

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

    Predeterminado

    @DestinedBroken,

    COBOL Código:
    1. perform obtener-campos until entrada = "s"

    Échale un vistazo a la lógica de esta parte. Cuando añades el primer registro, le pones la "s", en un momento dado tienes que limpiar el campo de la "s" porque queda ahí todo el rato.

    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.

  6. #6
      Forero
    G

    Registrado
    febrero de 2015
    Ubicación
    Quilmes, Buenos Aires
    Edad
    67
    Mensajes
    193
    Última visita
    Ayer a las 11:36

    Agradecimientos
     
    Recibidos
    124
    Enviados
    95

    Citaciones y menciones
     
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    2 Post(s)
    Poder de Reputación
    19
    Concurso: Segundo puesto / Point Value: 0 Activista del Foro / Point Value: 0

    Predeterminado

    @DestinedBroken, voy hacer una pregunta que parecerá muy tonta : haz hecho el diagrama antes de comenzar a codificar?

    Por que este problema en un programa tan simple se detecta de inmediato siguiendo la lógica del diagrama.

    0 Not allowed!

  7. #7
      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
    2 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    0

    Predeterminado

    @Kuk, Gracias compa. Lo puse a vacío tras volver de meter los datos por consola. Ahora funciona todo correcto. Una tontería vaya....

    @Gusaiello, diagrama? La primera vez que escucho eso. ¿Te refieres a dibujar en un papel lo que va a hacer el programa? Si es así, decir que el código es de un ejercicio hecho en un curso que estoy siguiendo. A mí me daba error cuando no debería, de ahí que lo haya intentado solucionar.

    0 Not allowed!

  8. #8
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    37
    Mensajes
    2,088
    Última visita
    Ayer a las 15:47

    Agradecimientos
     
    Recibidos
    908
    Enviados
    784

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

    Predeterminado

    @DestinedBroken, una cosa más, esto son ficheros y no BBDD. Cuando hablamos de BBDD entendemos DB2, MySQL, SQL Server etc. Es decir cuando utilizamos SQL.
    Esto son ficheros secuenciales. También existen los indexados, que son los abuelos de las BBDD

    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.

  9. #9
      Forero
    G

    Registrado
    febrero de 2015
    Ubicación
    Quilmes, Buenos Aires
    Edad
    67
    Mensajes
    193
    Última visita
    Ayer a las 11:36

    Agradecimientos
     
    Recibidos
    124
    Enviados
    95

    Citaciones y menciones
     
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    2 Post(s)
    Poder de Reputación
    19
    Concurso: Segundo puesto / Point Value: 0 Activista del Foro / Point Value: 0

    Predeterminado

    Cita Iniciado por DestinedBroken Ver Mensaje
    diagrama? La primera vez que escucho eso
    Si, exactamente a eso me refería.
    En mis inicios aprendi que el primer paso para realizar un programa era comenzar por el diagrama.
    Una vez hecho el diagrama, preparaba un lote de prueba que consistía en preparar un conjunto de datos que permitiera seguir todos los caminos del diagrama.
    Y por último hacía la pruebaa de escritorio que consistía en hacer pasar los datos del lote de prueba por el diagrama.
    Tal vez parezca un procedimiento algo tedioso, pero puedo garantizarte que a la hora de codificar, jamas me falló un programa ya que la lógica ya había sido probada.

    0 Not allowed!

  10. #10
      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
    2 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    0

    Predeterminado

    Cita Iniciado por Kuk Ver Mensaje
    @DestinedBroken, una cosa más, esto son ficheros y no BBDD. Cuando hablamos de BBDD entendemos DB2, MySQL, SQL Server etc. Es decir cuando utilizamos SQL.
    Esto son ficheros secuenciales. También existen los indexados, que son los abuelos de las BBDD
    Hola,
    Pues he dicho siempre "BBDD" porque es la terminología que usan en un cursillo que estoy siguiendo... Aunque teniendo en cuenta la ristra de fallos que estoy sacando, empiezo a pensar que no di precisamente con el mejor de todos los cursos. Gracias!

    @Gusaiello
    Sobre lo que comentas, intento presentar la idea del programa con lápiz y papel. Un poco de pseudo código y demás por el estilo. Pero cuando me pongo a programar como tal, lo que hago es probar también lo que he hecho con "tests" tontos. Las capturas mostradas en los hilos de ayuda que creo son precisamente de eso mismo. Para este ejercicio de la BBDD meto registros al más puro estilo "lorem ipsum" y ya.

    0 Not allowed!

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. [Sintaxis] ODBC - cambiar el "path" de una base de datos
    Por Hrmcobol en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 9
    Último Mensaje: 15.11.2022, 21:24
  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, 16:30
  3. Base de datos .mdb
    Por Lobosauseda en el foro Bases de datos
    Respuestas: 4
    Último Mensaje: 26.08.2019, 10:36
  4. [Sintaxis] Abrir o visualizar Base de datos Cobol
    Por Anuack en el foro COBOL - General
    Respuestas: 0
    Último Mensaje: 11.07.2017, 12: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, 23: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
  •