Pascal/Turbo Pascal - Problemas con modificacion de registros

 
Vista:

Problemas con modificacion de registros

Publicado por Kioon (12 intervenciones) el 20/05/2005 21:06:14

Hola a tod@s.

Bueno, ante todo muchas gracias por la ayuda que nos dais a todos. Quiero crear un registro para almacenar un numero. Ese número lo quiero tener para asignarlo como código de un supermercado e ira de 100 a X. No quiero utilizar un ARRAY ya que cuando cierre los ficheros y los vuelva a abrir deseo que se me asigne en el proximo pedido el siguiente numero consecutivo. La asignacion de tipos es de la siguiente forma:

TYPE

tipoNumero = RECORD

catalogo : INTEGER;

END;

datosSysNum=FILE OF tipoNumero;

VAR

datosN : datosSysNum;
n : tipoNumero;

Ahora quiero una funcion que cuando la llame si no esta creado el fichero NUM.DAT lo cree y el campo n.codigo lo inicie a 100 y si esta creado que AUMENTE en 1 el codigo lo guarde y lo devuelva. He intentado hacerlo de la siguiente forma, pero nunca me posiciono en el sitio correcto. Pienso que como solo vamos a utilizar el miosmo siempre sera SEEK (datosN,0):

FUNCTION devNumero:INTEGER;

VAR

n : tipoNumero;
aux,nuevo: INTEGER;

BEGIN

ASSIGN (datosN, 'NUM.DAT');
{$I-} RESET (datosN); {$I+}

IF (IOresult<>0) THEN

BEGIN

REWRITE (datosN);

SEEK (datosN,0);

n.catalogo:=100;

WRITE(datosN,n);
CLOSE(datosN);

devNumero:=aux;

END

ELSE

BEGIN

SEEK (datosN,0);

aux:=n.catalogo;
nuevo:=aux+1;

n.catalogo:=nuevo;

WRITE (datosN,n);
CLOSE (datosN);

devNumero:=nuevo;

END;

END;

Pienso que esta todo bien, pero cuando se inicia por primera vez (se crea el fichero) me da 100 (esto esta bien) la siguiente 80 y la incrementa una vez pero ya nunca la guarda ¿Que hago?

Saludos
Kioon
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:Problemas con modificacion de registros

Publicado por Diego Romero (786 intervenciones) el 22/05/2005 06:00:51
En el else del if, cuando se supone que el archivo ya existe, te falta leer el registro luego del Seek, tal como está en tu código fuente n.codigo no tiene ningún valor conocido cuando haces la suma. Esa parte debería ser así.
ELSE

BEGIN

SEEK (datosN,0);
Read(DatosN, n);
aux:=n.catalogo;
nuevo:=aux+1;

n.catalogo:=nuevo;

SEEK (datosN,0);
WRITE (datosN,n);
CLOSE (datosN);

devNumero:=nuevo;

END;
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