PDA

Ver la Versión Completa : Busqueda de datos en una BD con DATASET


rgstuamigo
29-12-2008, 22:16:20
Hola amigo estoy tratando :ode hacer una interfaz para hacer busqueda para cada tabla de mi BD pero utilizando los metodos que tienen los DataSet(Componentes Zeos) para esto. al parecer existen diferentes formas de hacer busqueda entre las cuales podria mencionar :Podriamos buscar por codigo,por nombre,por fercha o por cualquier otro atributo de la tabla,etc.
Pero me gustaria consultarle a ustedes sus opiniones,;)
Estoy tratando de entender los metodos que tienen un ZQuery que son:
ZQuery1.Lookup(algo,algo,algo,algo)
ZQuery1.Locate(algo,algo,algo,algo);

No se si pudieran orientarme si son los indicados o existen otros que se acomode a mis necesidades.
Lo que deseo es que cuando el usuario le de buscar,si el dato existe en la db entonces se seleccione la fila del DBGrid donde esta el dato; algo asi.
Les agradesco de antemano sus sugerencias y opiniones....;)
Saludos..... :)

PepeLolo
30-12-2008, 12:55:10
Hola,

Cuando el dataset tiene pocos registros el metodo locate funciona bien, el problema aparece cuando el dataset tiene muchos registros(unos miles), es en ese momento cuando se vuelve deficiente.

Cuando se realiza una búsqueda en un dataset, es más apropiado usar una sentencia SQL al estilo:
select * from TuTabla where codigo = :TuvaloraBuscar

puedes construirla en tiempo de ejecución, al estilo:
Sí se buscan cadenas utilizar los comodines "%" como

"where campo = %' + QuotedStr(Valor) + '%'


Si la búsqueda se realiza por multiples campos tener una SQL estandard al estilo :
Select * from TuTabla where 1=1
y añadir el resto de condiciones en tiempo de ejecución ya solo con la clausula ' and '.

Al estilo :

ZQuery.Close:
ZQuery.sql.Clear;
ZQuery.sql.Text := 'Select * from TuTabla where 1=1';
if CampoBusqueda <> '' then
ZQuery.sql.Add('and campo = ' + CampoBusqueda.Text);
....
try
ZQuery.disableControls;
ZQuery.open;
finally
ZQuery.EnableControls;
end;


espero te sirva

rgstuamigo
30-12-2008, 21:04:51
Gracias PepeLolo por la sugerencia veo que utilizas
ZQuery.disableControls;ZQuery.EnableControls;
Me gustaria que me orientaras que hacen especificamente estos
metodos del ZQuery?:confused: lo he visto en alguna ocasion pero la verdad
no los he utilizados.
Saludos....;)

Delphius
30-12-2008, 23:50:38
DisableControls y EnableControls se utilizan para inhabilitar y deshablitar el "pintado" de los controles que dependen del dataset.
Esto evita que por cada campo que se añade, por ejemplo en un dbgrid, se "repinte". De este modo se "pinta" la pantalla una vez que se llena todo y se evita ese efecto molesto.

Con pocos registros no hay problema, pero con varios se hace evidente esos "flashes".

Saludos,

rgstuamigo
30-12-2008, 23:54:25
DisableControls y EnableControls se utilizan para inhabilitar y deshablitar el "pintado" de los controles que dependen del dataset.
Esto evita que por cada campo que se añade, por ejemplo en un dbgrid, se "repinte". De este modo se "pinta" la pantalla una vez que se llena todo y se evita ese efecto molesto.

Con pocos registros no hay problema, pero con varios se hace evidente esos "flashes".

Saludos.
Ok Delphius muchas gracias por la aclaracion....;):).