Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Busqueda de datos en una BD con DATASET (https://www.clubdelphi.com/foros/showthread.php?t=62504)

rgstuamigo 29-12-2008 22:16:20

Busqueda de datos en una BD con DATASET
 
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:
Código Delphi [-]
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:
Código SQL [-]
select * from TuTabla where codigo = :TuvaloraBuscar

puedes construirla en tiempo de ejecución, al estilo:
Sí se buscan cadenas utilizar los comodines "%" como
Código Delphi [-]
  "where campo =  %' + QuotedStr(Valor) + '%'

Si la búsqueda se realiza por multiples campos tener una SQL estandard al estilo :
Código SQL [-]
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 :
Código Delphi [-]
  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

Cita:

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....;):).


La franja horaria es GMT +2. Ahora son las 05:01:30.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi