Cobol - Error manejando archivos relativos

 
Vista:

Error manejando archivos relativos

Publicado por Jhoany (3 intervenciones) el 25/11/2012 15:11:13
Buenos días,

Soy novato programando en RM/COBOL.

Estoy elaborando una tarea para la universidad consistente en un programa para llevar el control de ventas de una farmacia.

El registro de los clientes se debe almacenar en un archivo relativo cuya clave es el número del documento de identidad del cliente.

El archivo es creado en un pequeño programa auxiliar que además crea e inicializa con campos vacíos los 317 registros. Funciona bien (verificándolo con otro programa auxiliar para leer el contenido del archivo CLIENTES.DAT).

Posteriormente, en el programa principal, se realiza el trabajo de registro propiamente dicho.

Con el primer cliente aparentemente funciona bien, pero luego al intentar registrar un segundo cliente se genera un error de entrada/salida cód. 23. Este error se presenta cuando el registro solicitado no existe. Pareciera como si al escribir los datos del primer cliente se dañara la integridad del archivo externo.

Estaría muy agradecido si alguien me pudiera ayudar con las posibles causas de este error. Llevo dos días tratando de resolver este asunto.

A continuación, la estructura del archivo:

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ARCH-CLIENTES ASSIGN TO
'C:\RMCOBOL\CLIENTES.DAT'
ORGANIZATION IS RELATIVE
ACCESS MODE IS RANDOM
RELATIVE KEY IS DIREC-REL-CLTE
FILE STATUS IS ESTATUS-CLTE.

DATA DIVISION.
FILE SECTION.
FD ARCH-CLIENTES
LABEL RECORD STANDARD
DATA RECORD REG-CLIENTE.

01 REG-CLIENTE.
05 NRO-CEDULA-CLTE PIC 9(8).
05 NOMBRES-CLTE PIC X(20).
05 APELLIDOS-CLTE PIC X(25).
05 DIREC-RESID-CLTE PIC X(45).
05 NRO-TELEF-FIJO-CLTE PIC X(11).
05 NRO-TELEF-CEL-CLTE PIC X(11).
05 SITUACION-REG-CLTE PIC X.
88 REG-CLTE-LIBRE VALUE ' '.
88 REG-CLTE-OCUPADO VALUE '*'.

Cualquier información adicional que sea de utilidad, la puedo remitir por esta vía o por correo.

Gracias enormes.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Error manejando archivos relativos

Publicado por Superindio (138 intervenciones) el 25/11/2012 22:59:04
bueno primero quisiera saber COMO ESTABA ABIERTO? el programa al momento de acceder al archivo con una clave inexistente , me refiero a si es I-O INPUT OCUTPUT OUTPUT EXTEND...
o sino lo que podes hacer es controlar ese error:
IF W-FILESTATUS = "23" THEN
MOVE "CLIENTE INEXISTENTE2 TO WS-ERROR
SET HAY-QUE INSERTAR TO TRUE
END-IF

y de paso te tiro este link:
http://www.escobol.com/modules.php?name=Sections&op=viewarticle&artid=21
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error manejando archivos relativos

Publicado por Jhoany (3 intervenciones) el 26/11/2012 00:53:47
Saludos, Superindio.

Al momento de inicializar las 317 posiciones (en programa auxiliar): output.

El índice es obtenido por mapeo, en el programa principal, utilizando la técnica del residuo (a partir del número del documento de identidad, NRO-CEDULA-CLTE) con sondeo lineal para manejo de las colisiones.

Cuando se busca si el número de doc. de identidad ya ha sido registrado previamente: input (esta actividad es realizada de manera adecuada).

Al buscar la dirección vacía en la cual almacenar el registro actual: input (esta tarea solo se ejecuta bien con el primer registro, justo después de ejecutar el programa auxiliar de inicialización del archivo).

Al almacenar los datos del cliente ingresados por teclado: output (desempeño similar al descrito en el párrafo anterior).

Según tu sugerencia, he incorporado el código para la captura del error, evitando que el programa se "cuelgue". Ahora me hace falta poder saber porque W-FILESTATUS = "23" .

He revisado el enlace, y alguna bibliografía adicional. Ahora estoy procurando un documento que profundice en este error.

Muchísimas gracias por tu interés.

Saludos desde Venezuela.

Jhoany
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error manejando archivos relativos

Publicado por Superindio (138 intervenciones) el 27/11/2012 05:05:11
bueno el error 23 (FileEstatus=23) significa en un acceso directo, lectura de busqueda en un archivo indexado la cla no existe en el archivo... lo que podria hacer es si realmente es asi, antes del READ podes hacer un display de la clave para ver si no perdiste ningun valor que pertenezca a dicha clave... bueno para tus proximas consultas si podes postear el codigo seria genial... xq con tu explicación de lo que debe o hace tu programa cuesta mas deducir cual puede ser el error... pones parte del codigo en donde esta el error.... saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error manejando archivos relativos

Publicado por Jhoany Uzcategui (3 intervenciones) el 17/03/2013 15:28:50
Saludos, Superindio,

Gracias por tu ayuda. El fin de año, y varios proyectos me obligaron a suspender esta actividad, y ahora la estoy retomando.

A continuación el fragmento del código de todo el procedimiento que genera el error.

Te agradecería cualquier sugerencia o comentario.

En próximo comentario, notifico el resultado de tu consejo respecto a mostrar el valor de la clave.

Muchas gracias por tu ayuda.

* INICIO DEL FRAGMENTO DE CÓDIGO

BUSCAR-CLIENTE.
OPEN INPUT ARCH-CLIENTES.
DISPLAY 'Archivo abierto, lectura'.
MOVE '?' TO BAND-CLTE-ENCONTRADO.

DIVIDE DIVISOR-CLTES INTO NRO-CEDULA-BUSCADO
GIVING COCIENTE-CLTE REMAINDER DIREC-ORIGEN-CLTE.

ADD 1 TO DIREC-ORIGEN-CLTE.

MOVE DIREC-ORIGEN-CLTE TO DIREC-REL-CLTE.
READ ARCH-CLIENTES.

PERFORM
RASTREAR-REGS-BUSQ-CLTE
WITH TEST AFTER
UNTIL DIREC-REL-CLTE = DIREC-ORIGEN-CLTE OR
BAND-CLTE-ENCONTRADO = 'S' OR
BAND-CLTE-ENCONTRADO = 'N'.

IF BAND-CLTE-ENCONTRADO = '?'
THEN
MOVE 'N' TO BAND-CLTE-ENCONTRADO
END-IF.
CLOSE ARCH-CLIENTES.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar