Tema: Auxilio
Ver Mensaje Individual
  #4  
Antiguo 07-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola maugescully.

Cuando ví el título pensé que te estabas ahogando...

Voy a agregar algunas sugerencias a las que ya te ha dado Lord Delfos.

En este caso no es buena idea dejar que el usuario elija el nombre del archivo, complica la cosa y es
propenso a generar confusiones.
Si lo que guardamos son alumnos y el archivo es de texto, lo lógico es darle un nombre (ALUMNOS.TXT por ej.) y
trabajar con el mismo. El nombre de la variable archivo "Archi" podés declararlo como global por ahora.

Todo esto te simplifica puesto que podés habrir el archivo al ingresar a la aplicación y cerrarlo cuando
abandonas la misma, prescindiendo así de los TOpenDialog.

Abrir y Cerrar:
Código Delphi [-]
procedure TForm1.FormCreate;
begin
  Assign(Archi,'C:\PRUEBA\ALUMNOS.TXT'); // o variable con: ruta+nombre
{$i-}
  Reset(Archi);
  if IOResult <> 0 then 
    Rewrite(Archi);
{$I+}
end;

procedure TForm1.FormClose;
begin
  CloseFile(Archi);
end;

Los errores se generan en AgregarAlumo, mirá este código:
Código Delphi [-]
procedure TAdministrar.AgregarAlumno(a:Alumno; var b:byte);
begin
  {$I-}
  //Seek(Archi, FileSize (archi)); MAL:es archivo secuencial. Debe ir: 
  Append(Archi); //Append: añade datos al final de archivo de texto
  {$I+};
  b:=IOResult;
  if b = 0 then
  BEGIN  // Te faltaba, sólo ejecutaba la línea de abajo si b=0 y las demás sí o sí
    Writeln(Archi, a.Apellido);
    Writeln(Archi, a.Nombres);
    // de acuerdo a la versión que trabajes, tal vez debas convertir 
    // a string los campos que siguen.
    // (acordate que el archivo es de texto)
    Writeln(Archi, a.DNI);  // Longint-> string
    Writeln(Archi, a.N1);   // Real -> string   
    Writeln(Archi, a.N2);   
    Writeln(Archi, a.N3);   
  END // Te faltaba, necesario para if/then/begin/end
end;

Hay más cosas para depurar, pero la idea es que vos lo hagas...

Por último te aconsejo que escuches lo dicho por mi colega sobre el uso de {$I}.
Una pista: You try to resolve.


Saludos.

Última edición por ecfisa fecha: 07-08-2010 a las 17:05:17.
Responder Con Cita