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.