Iniciar Sesión

Ver la Versión Completa : [Compilador] Error 61 al abrir fichero en 2 programas a la vez


valpo
16 de febrero de 2024, 20:22
Hola, tengo el siguiente problema. Al abrir un mismo archivo indexado en otro programa simultaneamente, no deja ejecutarlo y da erorr 61.
dice libcob: error: file sharing conflict (status =61) for file PROPIEDADES ('PROPIEDADES.DAT' ==> PROPIEDADES.DAT)
Osea no me permite trabajar en red . hay solución para esto?

Saludos

Kuk
17 de febrero de 2024, 00:40
@valpo, hola, utilizas LOCK MODE en tu programa? Creo que por defecto se hace uso exclusivo, quiere decir que no puedes usar un mismo fichero simultáneamente en varios sitios.

Para poder hacerlo, mira este manual: https://gnucobol.sourceforge.io/guides/GnuCOBOL%202.2%20OCT2017%20Quick%20Reference%20(US %20Letter).pdf

Busca dentro LOCK MODE

Por cierto, qué motor de fichero indexado usas (creo recordar que había como varias posibilidades). Y por curiosidad, qué IDE usas? ;)

Josber
17 de febrero de 2024, 13:23
@valpo, yo creo que lo mejor es poner LOCK MODE AUTOMATIC y que sea el compilador el que resuelva los casos de compartición de ficheros.

Un salu2.-

valpo
17 de febrero de 2024, 20:32
hola, le puse el LOCK MODE IS AUTOMATIC en la SELECT de los archivos indexados, pero sale el mismo error al ejecutar el segundo programa. No estoy usando IDE, estoy a nivel de consola por cmd, abro 2 simbolos del sistema y corro un programa en cada una y al correr el segundo sucede el error . El motor del ficheros es vBISAM . SI ustedes no tienen este problema que motor tienen , podrian ver?

cobc (GnuCOBOL) 3.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Keisuke Nishida, Roger While, Ron Norman, Simon Sobisch, Edward Hart
Built Jul 28 2023 22:59:53
Packaged Jul 28 2023 17:02:56 UTC
C version (MinGW) "9.2.0"

build information
build environment : i686-pc-mingw32
CC : gcc
C version : (MinGW) "9.2.0"
CPPFLAGS : -I/mingw/include
CFLAGS : -O2 -pipe -finline-functions -fsigned-char
-Wall -Wwrite-strings -Wmissing-prototypes
-Wno-format-y2k
LD : c:/mingw/mingw32/bin/ld.exe
LDFLAGS :

GnuCOBOL information
COB_CC : gcc
COB_CFLAGS : -pipe -I/mingw/include -I/mingw/include
-Wno-unused -fsigned-char -Wno-pointer-sign
env: COB_CFLAGS : -I"C:\GnuCobol 3.2\include"
COB_DEBUG_FLAGS : -ggdb3 -fasynchronous-unwind-tables
COB_LDFLAGS :
env: COB_LDFLAGS : -L"C:\GnuCobol 3.2\lib"
COB_LIBS : -L/mingw/lib -lcob
COB_CONFIG_DIR : /mingw/share/gnucobol/config
env: COB_CONFIG_DIR : C:\GnuCobol 3.2\config
COB_COPY_DIR : /mingw/share/gnucobol/copy
env: COB_COPY_DIR : C:\GnuCobol 3.2\copy
COB_MSG_FORMAT : GCC
COB_OBJECT_EXT : o
COB_MODULE_EXT : dll
COB_EXE_EXT : exe
64bit-mode : no
BINARY-C-LONG : 4 bytes
endianness : little-endian
native EBCDIC : no
extended screen I/O : pdcurses
variable file format : 0
sequential file handler : built-in
indexed file handler : VBISAM
mathematical library : GMP
XML library : disabled
JSON library : cjson


Usa los botones de resalto de sintaxis y código

Kuk
18 de febrero de 2024, 11:15
@valpo, a ver ya no me acuerdo muy bien, pero creo que el AUTOMATIC es el por defecto y hace uso exclusivo del registro que es lo que te está pasando ahora. Lo que tienes que hacer es indicar LOCK MODE MANUAL y luego ir jugando con lecturas añadiendo WITH NO LOCK y sólo bloquear usando WITH LOCK cuando realmente lo necesites como exclusivo, es decir para modificar los datos.

Luego puedes ir comprobando si el registro al que accedes está bloqueado (en uso) y esperar a que se libere. Es decir tienes que aplicar la lógica de acceso concurrente a registros, con sus esperas, vía código.

A ver si te cuentan más cosas los amigos foreros porque yo no lo he usado mucho y hace muchísimo tiempo de eso. Pero vamos que está claro que tu problema tiene solución.


Por cierto, según Micro Focus, el motor DISAM es mejor: https://www.microfocus.com/documentation/cobol-it/4-11/user-guide/getting-started/disam-migration.html

Y GnuCOBOL permite instalación de dicho motor: https://github.com/OCamlPro/gnucobol?tab=readme-ov-file#isam-support

JCantero
18 de febrero de 2024, 20:45
@valpo, has puesto el fichero en las "DECLARATIVES"

Es que si no lo pones cuando se produce un error salta. Si están puestas las declaratives, el error producido se mete en el file-status.

:astro:

valpo
19 de febrero de 2024, 14:36
Ok gracias, entonces tendré que hacer uso de DECLARATIVES , abrir de i-o solo para grabar, todo un manejo de archivos. Es que estaba acostumbrado a rmcobol que solo abria los archivos de i-o al iniciar los programas y no habia ningún problema al compartir los archivos .
Saludos.

JCantero
19 de febrero de 2024, 17:06
@valpo, no es así

En rm/cobol hay que utilizar las declaratives porque si no no puedes controlar las excepciones.

En rm/cobol (multiusuario ) al abrir un fichero en modo "i-o" y hacer un "read", bloquea el registro si no le pones "with no lock"

Si lo haces en modo "input" no bloquea al realizar un "read", logicamente.

valpo
19 de febrero de 2024, 17:37
Exacto, pero solo bastaba "with no lock" en los "read" y nada más , y habría los archivos i-o en todos los programas y todos los usuarios leian, grababan y regrababan simultaneamente sin problemas. En gnucobol no puedo tener abierto 1 mismo archivo de i-o en 2 programas simultaneos. Eso estoy tratando de hacer en gnucobol , abriendo i-o solo al momento de grabar o regrabar, aunque aun no me resulta.. en eso estoy.

JCantero
19 de febrero de 2024, 22:59
@valpo, Pero has puesto el fichero en las declaratives ?

valpo
22 de febrero de 2024, 13:59
@JCantero, si puse declaratives, pero solo sirve para enviar un mensaje cuando se produce el bloqueo. No soluciona nada por si mismo, igual hay que hacer el manejo de las aperturas de ficheros.

JCantero
22 de febrero de 2024, 14:45
@valpo, pon aqui el apartado de las declaratives o el .cbl para que veamos y te podamos entre todos ayudar

:astro:

- - - Updated - - -



Deberia estar asi mas o menos suponiendo que el fichero es "Libros"


procedure division.
declaratives.
errores section.
use after standard error procedure on libros.


Si está así y el file status no te da el error porducido entonces es que el gestor de ficheros no contiene esta posibilidad o hay que configurar de otra forma