Ver Mensaje Individual
  #10  
Antiguo 28-07-2008
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 438
Reputación: 21
JoAnCa Va por buen camino
Cool Sobre eliminar un record

Implementando el ejemplo de Delphius, la opcion de eliminar no funciona correctamente. Pues me deja repetido un registro, y deja registros vacios al final, como ya comento kabracity

Le hice unos arreglos y le agregue la funcion Truncate();, que su funcion es eliminar todos los registros a partir de la posicion actual.

Así fue como quedo en mi programa:
Código Delphi [-]
procedure TfrmClave.BotonDelUserClick(Sender: TObject);
 var
  Pos :Integer;

begin
 //Procedimiento para eliminar el registro seleccionado en el combobox
 Pos:=0; Seek(MiFile, 0);

 //Para ubicar la posicion en el fichero
 while Not Eof(MiFile) do
  begin
   Read(MiFile, Usuario);
   if Usuario.Nombre = ComboUser.Text then
    begin
      Pos:=FilePos(MiFile);   //Si lo encontre, guardo la posicion y salgo
      Break;
    end;
  end;

 //Este es el ejemplo de Delphius "arreglado"
 while Not Eof(MiFile) do
  begin
    Read(MiFile,Usuario);
    Seek(MiFile,Pos-1);
    Write(MiFile, Usuario);
    Inc(Pos);
    Seek(MiFile,Pos);
  end;

 Seek(MiFile,Pos-1);
 Truncate(MiFile);          //Funcion para eliminar los registros que sobran  

 //------ Actualizar el Combobox --------
 Seek(MiFile,0);  ComboUser.Items.Clear;
 While Not EOF(MiFile) do
  begin
    Read(MiFile, Usuario);
    ComboUser.Items.Add(Usuario.Nombre);
  end;
 ComboUser.Text:='';
end;

De esta forma me funciona perfecto, elimina bien.

kabracity
El uso de este tipo de ficheros, como decia Delphius, es para cosas sencillas, para algo mas complejo es mejor usar Bases de Datos.
En mi caso lo uso, pues solo almacenare un registro de usuarios, que siempre van a ser pocos (nunca seran mas de 10 o 20), no me afectaria el rendimiento.

Última edición por JoAnCa fecha: 28-07-2008 a las 18:36:36.
Responder Con Cita