Gracias Rui Pinto (Rapinto)
COBOL Foro
Foro dedicado a COBOL, a la Programación y a la Informática.
  COBOL Foro > IDE-s y compiladores COBOL > MicroFocus COBOL > Visual Cobol
Visual Cobol El último IDE de MicroFocus basado en Eclipse y Plugin para Visual Studio.
Comunicados
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] URGENTE: Base de Datos en MySql en Red Hrmcobol PowerCOBOL (ActiveX, v4 - v11) 10 21 de agosto de 2021 14:30
[Sintaxis] ODBC - cambiar el "path" de una base de datos Hrmcobol PowerCOBOL (ActiveX, v4 - v11) 8 23 de diciembre de 2020 19:46
Base de datos .mdb Lobosauseda Bases de datos 4 26 de agosto de 2019 08:36
[Sintaxis] Abrir o visualizar Base de datos Cobol Anuack COBOL - General 0 11 de julio de 2017 10:08
[Sintaxis] Ayuda para interactuar con base de Datos Breew PowerCOBOL (ActiveX, v4 - v11) 19 28 de enero de 2016 21:46
Respuesta
 
Herramientas

  #1
Antiguo 30 de noviembre de 2021, 16:28
IDENTIFICATION DIVISION
DestinedBroken
 Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de DestinedBroken
DATA DIVISION
octubre 2021
16.02.2022 10:57
PROCEDURE DIVISION
Posts: 28
Enviado: 16
Recibido: 4
Soluciones: 0
Reputación: 0
DestinedBroken is an unknown quantity at this point
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:

Código COBOL:
  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.
DestinedBroken no ha iniciado sesión   Responder Con Cita
  #2
Antiguo 30 de noviembre de 2021, 18:06
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
diciembre 2014
Madrid
37 años
21.05.2022 00:00
PROCEDURE DIVISION
Posts: 1.990
Enviado: 687
Recibido: 850
Soluciones: 100
Reputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

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

Código COBOL:
  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



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk no ha iniciado sesión   Responder Con Cita
  #3
Antiguo 30 de noviembre de 2021, 21:38
IDENTIFICATION DIVISION
Fito
 Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Razón: Por muchos agradecimientos de parte de los Foreros  Guardián del Foro: Guardián del espíritu y clima del Foro - Razón: Por el Avatar  Activista del Foro: Activista del Foro - Razón: Por aportar ideas 
ENVIRONMENT DIVISION
Avatar de Fito
DATA DIVISION
febrero 2015
Córdoba, Villa María
51 años
20.05.2022 22:30
PROCEDURE DIVISION
Posts: 329
Enviado: 174
Recibido: 170
Soluciones: 16
Reputación: 24
Fito is on a distinguished road Fito is on a distinguished road Fito is on a distinguished road Fito is on a distinguished road Fito is on a distinguished road Fito is on a distinguished road Fito is on a distinguished road Fito is on a distinguished road Fito is on a distinguished road Fito is on a distinguished road Fito is on a distinguished road
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...
Fito no ha iniciado sesión   Responder Con Cita
  #4
Antiguo 1 de diciembre de 2021, 15:47
IDENTIFICATION DIVISION
DestinedBroken
 Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de DestinedBroken
DATA DIVISION
octubre 2021
16.02.2022 10:57
PROCEDURE DIVISION
Posts: 28
Enviado: 16
Recibido: 4
Soluciones: 0
Reputación: 0
DestinedBroken is an unknown quantity at this point
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:


Código COBOL:
  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.
DestinedBroken no ha iniciado sesión   Responder Con Cita
  #5
Antiguo 1 de diciembre de 2021, 19:20
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
diciembre 2014
Madrid
37 años
21.05.2022 00:00
PROCEDURE DIVISION
Posts: 1.990
Enviado: 687
Recibido: 850
Soluciones: 100
Reputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

@DestinedBroken,

Código COBOL:
  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.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk no ha iniciado sesión   Responder Con Cita
  #6
Antiguo 2 de diciembre de 2021, 10:52
IDENTIFICATION DIVISION
Gusaiello
 Forero
Concurso: Segundo puesto: Ganador/a del Segundo puesto en un concurso - Razón: Generador de código QR encriptado  Activista del Foro: Activista del Foro - Razón: Por aportar ejecrcicios para los novatos 
ENVIRONMENT DIVISION
Avatar de Gusaiello
DATA DIVISION
febrero 2015
Quilmes, Buenos Aires
67 años
19.05.2022 20:32
PROCEDURE DIVISION
Posts: 174
Enviado: 80
Recibido: 114
Soluciones: 7
Reputación: 18
Gusaiello is on a distinguished road Gusaiello is on a distinguished road Gusaiello is on a distinguished road Gusaiello is on a distinguished road Gusaiello is on a distinguished road Gusaiello is on a distinguished road Gusaiello is on a distinguished road Gusaiello is on a distinguished road
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.
Gusaiello no ha iniciado sesión   Responder Con Cita
  #7
Antiguo 3 de diciembre de 2021, 09:57
IDENTIFICATION DIVISION
DestinedBroken
 Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de DestinedBroken
DATA DIVISION
octubre 2021
16.02.2022 10:57
PROCEDURE DIVISION
Posts: 28
Enviado: 16
Recibido: 4
Soluciones: 0
Reputación: 0
DestinedBroken is an unknown quantity at this point
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.
DestinedBroken no ha iniciado sesión   Responder Con Cita
  #8
Antiguo 4 de diciembre de 2021, 10:21
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
diciembre 2014
Madrid
37 años
21.05.2022 00:00
PROCEDURE DIVISION
Posts: 1.990
Enviado: 687
Recibido: 850
Soluciones: 100
Reputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
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



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk no ha iniciado sesión   Responder Con Cita
  #9
Antiguo 6 de diciembre de 2021, 09:51
IDENTIFICATION DIVISION
Gusaiello
 Forero
Concurso: Segundo puesto: Ganador/a del Segundo puesto en un concurso - Razón: Generador de código QR encriptado  Activista del Foro: Activista del Foro - Razón: Por aportar ejecrcicios para los novatos 
ENVIRONMENT DIVISION
Avatar de Gusaiello
DATA DIVISION
febrero 2015
Quilmes, Buenos Aires
67 años
19.05.2022 20:32
PROCEDURE DIVISION
Posts: 174
Enviado: 80
Recibido: 114
Soluciones: 7
Reputación: 18
Gusaiello is on a distinguished road Gusaiello is on a distinguished road Gusaiello is on a distinguished road Gusaiello is on a distinguished road Gusaiello is on a distinguished road Gusaiello is on a distinguished road Gusaiello is on a distinguished road Gusaiello is on a distinguished road
Predeterminado

Citación del post de 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.
Gusaiello no ha iniciado sesión   Responder Con Cita
  #10
Antiguo 2 de febrero de 2022, 10:00
IDENTIFICATION DIVISION
DestinedBroken
 Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de DestinedBroken
DATA DIVISION
octubre 2021
16.02.2022 10:57
PROCEDURE DIVISION
Posts: 28
Enviado: 16
Recibido: 4
Soluciones: 0
Reputación: 0
DestinedBroken is an unknown quantity at this point
Predeterminado

Citación del post de 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.
DestinedBroken no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
Kuk ( 5 de febrero de 2022)
Respuesta


Usuarios activos actualmente viendo este tema: 1 (0 miembros y 1 visitantes)
 
Herramientas

Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado



La franja horaria es GMT +1. Ahora son las 07:57.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2022, Jelsoft Enterprises Ltd.