Cobol - Problema con Codigo

 
Vista:

Problema con Codigo

Publicado por Alejandro Sanchez (1 intervención) el 16/11/2006 11:44:42
Hola, quisiera saber si alguien me puede ayudar con este problema q tengo con un codigo, el problema es q es una consulta sobre una base de datos de clientes pero cuando realizo la busqueda, si encuentra el numero del cliente (campo clave) me muestra los datos del primer registro del archivo siempre, tambien esta el problema de q su busco algun cliente q no existe, me aparece la opcion cliente inexistente, pero cando quiero realizar otra busqueda se sale del programa, agradeceria mucho su ayuda ya q esto es para un trabajo de la escuela y lamentablemente tengo q entregarlo mañana. Desde ya muchas gracias.

identification division.
program-id. modif.
environment division.
input-output section.
file-control.
select optional proy assign to "alta.dat"
organization is indexed
access mode is dynamic
record key is codigo
alternate record key is dni.

data division.
file section.
fd proy.
01 reg-proy.
02 codigo pic 9(4).
02 nombre pic X(20).
02 apellido pic X(20).
02 dni pic 9(8).
02 domicilio pic X(20).
02 telefono pic X(15).
02 dia pic 9(2).
02 mes pic 9(2).

working-storage section.
77 cod pic 9(4).
77 cont pic 9(2).
77 resp pic X.
77 letra pic X.
procedure division.
open i-o proy
move "s" to resp
perform until resp = "n"

read proy next at end

end-read
display "Ingrese el codigo que desea consultar"
accept cod, no beep
move cod to codigo
start proy key = codigo
invalid key
display "El dato ingresado es incorrecto"

not invalid key
display "Su codigo es el numero: ", codigo
display "Nombre: ", nombre
display "Apellido: ", apellido
display "Dni: ", dni
display "Domicilio: ", domicilio
display "Telefono", telefono
move mes to cont
if cont = 12 then
move 1 to cont
else
compute cont = cont + 1
end-if
display "Su cuota vence el: ",dia,display "/", cont
end-start
display "¿Desea realizar más consultas? (s/n)"
accept resp, no beep
end-perform.
*Cuando metes uno que no esta y queres seguir se sale
close proy.
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

RE:Problema con Codigo

Publicado por alberto (72 intervenciones) el 16/11/2006 15:40:44
Alejandro:

Con la sentencia START no se leen los registros, lo que hace el START es posicionarse en el registro más cercano al código digitado, Pero a continuación de una sentencia START hay que hacer una lectura del registro secuencial READ NEXT y te leerá el primer registro, si no pones la READ SECUENCIAL no te lee.

Pero si lo que quieres es leer un registro según un código, NO debes usar el START, si no la instrucción READ RECORD PROY INVALID KEY GO TO NOEXISTE.

Espero que te sirva, Repasa las READ, que hay tienes el problema.

Un saludo desde Gijón-Asturias (España)

Alberto.
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

RE:Problema con Codigo

Publicado por SuperIndio (161 intervenciones) el 17/11/2006 16:03:22
Yo lo haria asi:
IDENTIFICATION DIVISION.
PROGRAM-ID. CONSL.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OPTIONAL PROY ASSIGN TO "ALTA.DAT"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS CODIGO
ALTERNATE RECORD KEY IS DNI.

DATA DIVISION.
FILE SECTION.
FD PROY.
01 REG-PROY.
02 CODIGO PIC 9(4).
02 NOMBRE PIC X(20).
02 APELLIDO PIC X(20).
02 DNI PIC 9(8).
02 DOMICILIO PIC X(20).
02 TELEFONO PIC X(15).
02 DIA PIC 9(2).
02 MES PIC 9(2).
WORKING-STORAGE SECTION.
77 COD PIC 9(04).
77 CONT PIC 9(02).
77 RESP PIC X(01).
77 LETRA PIC X(01).
01 SWT-BUSCADOR PIC 9(01) VALUE 0.
88 SI-EXISTE-REG VALUE 0.
88 NO-EXISTE-REG VALUE 1.
PROCEDURE DIVISION.
MAIN.
OPEN I-O PROY
MOVE "S" TO RESP
PERFORM UNTIL RESP = "N" OR "n"
DISPLAY "SU CODIGO ES EL NUMERO: ", CODIGO
DISPLAY "INGRESE EL CODIGO QUE DESEA CONSULTAR"
ACCEPT COD
MOVE COD TO CODIGO
READ PROY INVALID KEY SET NO-EXISTE-REG TO TRUE
NOT INVALID KEY SET SI-EXISTE-REG TO TRUE
END-READ
IF SI-EXISTE-REG THEN
DISPLAY "EL DATO INGRESADO ES INCORRECTO"
DISPLAY "NOMBRE: ", NOMBRE
DISPLAY "APELLIDO: ", APELLIDO
DISPLAY "DNI: ", DNI
DISPLAY "DOMICILIO: ", DOMICILIO
DISPLAY "TELEFONO", TELEFONO
MOVE MES TO CONT
IF CONT = 12 THEN
MOVE 1 TO CONT
ELSE
COMPUTE CONT = CONT + 1
END-IF
DISPLAY "SU CUOTA VENCE EL: ", DIA , "/", CONT
ELSE
DISPLAY "REGISTRO INEXISTENTE"
END-IF
DISPLAY "¿DESEA REALIZAR MÁS CONSULTAS? (S/N)"
INITIALIZE RESP
ACCEPT RESP
END-PERFORM.
CLOSE PROY.
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

RE:Problema con Codigo

Publicado por Benito Camela (37 intervenciones) el 20/11/2006 01:49:33
Aparecistes INDIGENA !!!!!!! jejejejejejeeje......donde estabas metido ALMACIGO DE DE LA IGNORANCIA.... se te extrañaba... jajaja
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