Otros temas que te pueden interesar
|
||||
| Tema | Autor | Foro | Respuestas | Último post |
| [Duda] I/O Error al ejecutar una base de datos | DestinedBroken | Visual COBOL y DEV-HUB | 11 | 2 de febrero de 2022 11:13 |
| [Sintaxis] URGENTE: Base de Datos en MySql en Red | Hrmcobol | PowerCOBOL (ActiveX, v4 - v11) | 10 | 21 de agosto de 2021 15:30 |
| Base de datos .mdb | Lobosauseda | Bases de datos | 4 | 26 de agosto de 2019 09:36 |
| [Sintaxis] Abrir o visualizar Base de datos Cobol | Anuack | COBOL - General | 0 | 11 de julio de 2017 11:08 |
| [Sintaxis] Ayuda para interactuar con base de Datos | Breew | PowerCOBOL (ActiveX, v4 - v11) | 19 | 28 de enero de 2016 22:46 |
![]() |
|
Forero Junior
![]()
|
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: Código COBOL:
|
||||||||
|
|
|
|
El Foro es mi casa
![]()
|
No esta corrupto.
Tu problema es que en el otro hilo creaste la fd asi: Código COBOL:
Y ahora lo estas displayando leyendo del fichero con otra estructura Código COBOL:
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. |
||||||||
|
|
|
|
Forero Junior
![]()
|
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... |
||||||||
|
|
|
|
Moderador Global
![]()
|
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 RUNEl 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 Código COBOL:
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. |
||||||||
|
|
|
|
Forero Junior
![]()
|
@Josber,
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".
![]() Código COBOL:
Código COBOL:
¿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. |
||||||||||
|
|
|
|
Moderador Global
![]()
|
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 Código COBOL:
que Código COBOL:
o el equivalente sin el END-READ, pero con sus correspondientes puntos (.) de fin de sentencia Código COBOL:
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.- |
||||||||
|
|
|
|
Administrador
![]()
|
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 ![]() 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 |
||||||||
|
|
|
![]() |
| Herramientas | |
|
|
| Archivo - Cobol Foro | Contactar con Nosotros - Cobol Foro | |||||||