Ver Mensaje Individual
  #1  
Antiguo 18-12-2006
runnerfrog runnerfrog is offline
Registrado
 
Registrado: dic 2006
Posts: 3
Reputación: 0
runnerfrog Va por buen camino
object pascal - buscar en un record por contenido de un edit.

Hola, quería consultarlos por mi siguiente limitación: puedo hacer una búsqueda de campos personales por número de orden en un record guardado en archivo binario (usando seek), pero no sé cómo hacer la búsqueda por un campo personal, como nombre o documento, y que devuelva los demás datos de la persona en el record (tampoco entiendo cómo borrarlos). Tengo la parte que importa del código O.O. (de object pascal) dispuesto así:

primera unit:


Código:
Código Delphi [-]
unit Unit1;

interface
uses
  [...] unit2

var
  Form1: TForm1;
  z:TManejoSocios;

procedure TForm1.FormCreate(Sender: TObject);
begin
  z:=TManejoSocios.Create;
end;

procedure TForm1.BuscarSocio1Click(Sender: TObject);
                            var i:word; c:Socio; mensaje:string;
begin
 i:=StrToInt(Edit1.Text);
 z.BuscarSocio(i,c,mensaje);

 If mensaje='OK' then
      begin
       Edit2.Text:=c.Apellido;
       Edit3.Text:=c.Nombres;
       Edit1.Text:=IntToStr(c.DNI);
       Edit4.Text:=IntToStr(c.dn);
       Edit5.Text:=IntToStr(c.mn);
       Edit6.Text:=IntToStr(c.an);
      end
                  else
       ShowMessage(mensaje);
end;

...y lo que importa en la segunda unidad:

Código:
Código Delphi [-]
unit Unit2;

interface
 uses SysUtils;
 Type
 Socio= Record
  Apellido, nombres: string[20];
  DNI:longint;
  DN,MN,AN:integer;
         end;
 TManejoSocios=class
   private
     Archi:File of Socio;
   public

     procedure BuscarSocio(p:longint; var c:Socio; 
 end;

implementation

procedure TManejoSocios.BuscarSocio(p:longint;var c:Socio;
                                              var m:string);
   var Largo:word;
   begin
   {$I-} Largo:=FileSize(archi);{$I+};
    If (IOResult<>0)
      then
       begin
     m:='Problemas con el archivo. Está creado o abierto?';
     exit
       end
      else  if p>=Largo then
       begin
         m:='El Número de registro está fuera de rango.';
         exit;
       end;
    Seek(Archi,p);
    Read(archi,c);
    m:='OK'
    end;
__ _ __ _ __ _ __ _

Como dije esto sirve para buscar por número de ingreso al record, pero no se me ocurre como llenar el edit1 con un apellido, nombre o dni y que rellene los demas edits con todos los datos correspondientes, actualmente logro esto sólo al ingresar el número de orden del record en el edit1.

Saludos a todos, feliz navidad, y disculpen la longitud, ofuscación del código e ignorancia personal.
Responder Con Cita