Delphi - buscar registro en archivos de acceso directo

 
Vista:

buscar registro en archivos de acceso directo

Publicado por Ramiro (2 intervenciones) el 27/02/2007 18:59:04
Hola, necesito programar un boton que me realice la búsqueda de registros en un archivo de acceso directo. Yo agrego información desde las edit, y necesito que me busque por ejemplo por D.N.I. y los muestre nuevamente en las edit. Trabajo con dos unit por separado. sé que no es muy complicado...pero aca estoy confuso..alguien me puede ayudar???

Gracias
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:buscar registro en archivos de acceso directo

Publicado por HAHR (117 intervenciones) el 27/02/2007 19:13:43
Existe una propiedad a nivel de dataset

adodsverifica.locate('cod_usuario',fprincipal.guserid,[lopartialkey])

esto me hace una busqueda directa, lopartialkey cre oque tiene otroas propiedades, es cuestion de q investigue un poco mas. yo lo uso asi.

Saludos
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

RE:buscar registro en archivos de acceso directo

Publicado por Bruno (27 intervenciones) el 27/02/2007 20:49:58
Hola no se trata de database, entonces tenes que usar un bucle por ej. un while pare recorrer el archivo mientras no sea el fin de este y vas comparando cada registro con lo que buscas, cuando lo encontras, salis.
Por ejemplo asi:

while (not EOF("Tu_Archivo")) do
begin
Read("Tu_Archivo",RegTemp);
if (RegTemp."campo_Buscado"="Dato_Buscado") then
begin
//Resolves el problema
end;
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

RE:buscar registro en archivos de acceso directo

Publicado por ramiro (2 intervenciones) el 28/02/2007 09:52:10
Probé este código, la verdad no me tira error, pero tampoco me funciona. Mira me quedó asi:

UNIT 1

procedure TForm1.BuscarSocio1Click(Sender: TObject);

var i:longint; c:socio;
mensaje:string;
begin
i:=strtoint(edit4.Text);
z.buscarsocio(i,c,mensaje);
if mensaje='OK' then
begin
form2.edit1.text:=c.apellido;
form2.edit2.Text:=c.nombres;
form2.edit3.Text:=inttostr(c.DNI);
form2.edit6.Text:=inttostr(c.dia);
form2.edit7.Text:=inttostr(c.mes);
form2.edit8.Text:=inttostr(c.anio);
form2.showmodal;
Form1.Show;
end
else
showmessage(mensaje);

UNIT2
procedure tmanejosocios.buscarsocio(p:word;var c:socio;
var m:string);
var dni:longint;
begin
while not eof(archi)do
begin
read(archi,c);
if(c.DNI=dni)then
m:='OK'
end;

Sin duda hay algo aca incorrecto. Crees que con este mismo código arreglado podré hacer que muestre todos los datos cargados sin ningún condicionante (en este caso DNI)(quizas quitando la línea " if(c.DNI=dni)then"

Gracias
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

RE:buscar registro en archivos de acceso directo

Publicado por Bruno (27 intervenciones) el 28/02/2007 13:29:39
Hola mira no lo probe pero me parece q tendrias que salir del while una ves que los encoras (osea cuando la condicion "(c.DNI=dni)" te de true) podes hacer lo sig:

UNIT2
procedure tmanejosocios.buscarsocio(p:word;var c:socio;
var m:string);
var
dni:longint;
bandera: boolean;
begin
bandera:=true;
while not eof(archi) and bandera=true do
begin
read(archi,c);
if(c.DNI=dni) then
begin
m:='OK'
bandera:=false;
end;
end;

no es mas q agregar una variable boolean (bandera) para cortar while, porq lo q anda pasando es que cada ves que ejecutas la funcion "buscarsocio()" recorres todo el archivo y te paras en el ultimo reg o en el codigo de fin de archivo. (abria q probar con la sentencia breack no se si funciona en delphi) saludos
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

RE:buscar registro en archivos de acceso directo

Publicado por Ramiro (2 intervenciones) el 01/03/2007 06:37:05
hola de nuevo. el código no me tira error, pero al poner buscar, solo me aparece un sowmensaje con el boton ok, pero no busca nada....el código según tus apreciaciones me quedó asi:

UNIT1

procedure TForm1.BuscarSocio1Click(Sender: TObject);

var i:longint; c:socio; //I sería el d.n.i. a buscar
mensaje:string;
begin
i:=strtoint(edit4.Text);
z.buscarsocio(i,c,mensaje);
if mensaje='OK' then
begin
edit1.text:=c.apellido;
edit2.Text:=c.nombres;
edit3.Text:=inttostr(c.DNI);
edit6.Text:=inttostr(c.dia);
edit7.Text:=inttostr(c.mes);
edit8.Text:=inttostr(c.anio);
Form1.Show;
end
else
showmessage(mensaje);
end;

UNIT2

procedure tmanejosocios.buscarsocio(p:word;var c:socio;
var m:string);
var dni:longint;
bandera:boolean;
begin
bandera:=true;
while not eof(archi)and bandera=true do
begin
read(archi,c);
if(c.dni=dni)then
begin
bandera:=false;
m:='OK'
end;
end;
end;

De por si, estoy viendo que la variable p:word está demás, en realidad es, porque parte del código es de un buscardor, pero por número de registros, y ahora lo necesito por número de D.N.I. . Creo que el ahora hay una pequeña traba, pero que sino haría la búsqueda correctamente, pero, no hallo el problema....
Saludos y Gracias
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

RE:buscar registro en archivos de acceso directo

Publicado por Bruno (27 intervenciones) el 01/03/2007 15:19:43
hola mira lo que puede estar pasando es que tenes problemas a la hora de abrir y serrar el archivo te recomiento lo sig.:

pone Reset(Archi); antes del while y al finalizar el while

saludos
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