Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-12-2009
marcoi marcoi is offline
Registrado
 
Registrado: dic 2009
Ubicación: Veracruz
Posts: 5
Poder: 0
marcoi Va por buen camino
busqueda de registros en un dbgrid con mysql

hola a todos soy nuevo por aqui y me gustaria que me ayudaran con mi problema ya que he buscado por mucho y no encuentro solucion. utilizo delphi 7 y mysql4 como base de datos, quiero hacer dos tipos de busquedas el cual la primera ya lo tengo que es una busqueda mediante un campo llave y este me lleve a dinde se encuentra dicho campo en el dbgrid, los elementos que utilizo son un edit, un button , y el dbgrid los campos que tengo el la tabla son;
codigo(campo llave)
productos
cantidad
etc...
la otra busqueda que quiero hacer mediante el campo de productos es decir que al escribir en el edit el producto y le click en buscar este me señale en el mismo dbgrid el producto que busco pero no se como hacerlo ya que pienso utilizar ese mismo dbgrid que ya tiene datos cargados para las dos busquedas
este es un ejemplo del buscador
por cierto he visto que muchos utilizan query para esto y veo que es facil pero no lo hago por que las dos busquedas las quiero hacer en el mismo dbgrid espero me entiendan
------------------------------
------buscar-------------------------------
checkbox--->[]por codigo [___________] |
checkbox--->[]por producto [buscar] |
-------------------------------------------
el codigo de busqueda que hice para el primero que es por codigo es:

if radiobutton1.Checked =true then
begin
datamodule1.productos.SetKey;
datamodule1.productos.FieldValues['codigo']:=edit1.Text;
if not datamodule1.productos.GotoKey then
begin
messagedlg('NO EXISTE ESE CODIGO',mtinformation,[mbok],0);
end;
Responder Con Cita
  #2  
Antiguo 27-12-2009
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
Los componentes db-aware (como el dbgrid) son componentes de visualización y sólo se usan -o se deberían usar- para mostrar datos, el trabajo de localización y actualización de datos lo debes realizar con los datasets, mientras menos uses los componentes visuales para manipular datos, menos problemas tendrás, luego de muchos golpes en la cabeza entendí eso.

Una método que te permite hacer una búsqueda por más de un campo es Locate, trata de hacer lo siguiente:

Código:
datamodule1.productos.locate('codigo;nombre', [edit1.text, edit2.text], [loCaseInsensitive]  );
espero te sirva.
__________________
self.free;
Responder Con Cita
  #3  
Antiguo 27-12-2009
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Una recomendación, ese efecto de "speed search" o búsqueda rápida es vistoso pero inútil al final porque el locate solo busca lo que empiece con lo que escribas en el TEdit. Si tu tabla solo tiene unas cuantas filas, al final si puede ser útil, pero si es una tabla con miles de registros no veo el caso e usar un grid para mostrarlas todas si al final el usuario no quiere verlas todas sino una o dos. Cuesta trabajo conceptualizar un diseño en donde los grids se usen únicamente para mostrar resultados de búsquedas y no como la fuente donde el usuario va a buscar. Te pongo un ejemplo, es como si le das al usuario la guía telefónica y le pides que ahi el busque el nombre que desea, cuando esa búsqueda la puede hacer el sistema.

Lo que yo recomiendo casi siempre es usar uno o varios TEdits para pedir al usuario que escriba los criterios de búsqueda. Tratándose de nombres o campos que contienen solo texto le pido que ponga solo la parte que más lo identifique, no necesariamente las letras con las que comience. Por ejemplo si busca "MARTILLO DE UÑA", bastaría conque pusiera "UÑA" o "MARTILL". Lo que hago en el query es hacer un LIKE para que me devuelva todos los registros que contengan esa subcadena. El resultado lo muestro en un grid y de ahi ya puede el usuario seleccionar el que desee ver o editar. Además tenemos la ventaja de que en el grid mostramos únicamente las columnas relevantes no necesariamente todos los campos, pues por ejemplo un registro podría tener que será, unos 40 campos distintos y mostrarlos todos no tendría caso. De esta forma optimizas la velocidad de tu aplicación, el uso de memoría y las querys son mucho más rápidas, más a aún si es un sistema que funciona en línea.

Mi regla de oro para este tipo de casos es traer del servidor la menor cantidad de datos posibles.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #4  
Antiguo 30-12-2009
marcoi marcoi is offline
Registrado
 
Registrado: dic 2009
Ubicación: Veracruz
Posts: 5
Poder: 0
marcoi Va por buen camino
muchas gracias me ayudo mucho lo que me dijeron ya lo pude solucionar
Responder Con Cita
  #5  
Antiguo 31-12-2009
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
marcoi sería bueno que compartieras tu solución así ayudas a quien tenga el mismo problema que tú.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #6  
Antiguo 31-12-2009
marcoi marcoi is offline
Registrado
 
Registrado: dic 2009
Ubicación: Veracruz
Posts: 5
Poder: 0
marcoi Va por buen camino
mi solucion

mi solucion fue la siguiente programandola en un boton
procedure TForm1.Button6Click(Sender: TObject);
begin
if radiobutton1.Checked =true then
begin
datamodule1.productos.SetKey;
datamodule1.productos.FieldValues['codigo']:=edit1.Text;
if not datamodule1.productos.GotoKey then
begin
messagedlg('NO EXISTE ESTE CODIGO',mtinformation,[mbok],0);
end;
end;
if radiobutton2.Checked= true then
begin
datamodule1.productos.Locate('producto', edit1.Text,[loPartialKey,loCaseInsensitive]);

end;
end;
Responder Con Cita
  #7  
Antiguo 01-01-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Excelente solución, solo hay que anotar que para usar GotoKey es necesario que la tabla en cuestión tenga el índice correspondiente sobre el campo de búsqueda, que en tu caso era 'codigo'. Tomando en cuenta este detalle tu solución es la adecuada.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Busqueda De Registros Delphi Firebird jorge arturo le Firebird e Interbase 2 22-07-2008 18:44:13
Busqueda de registros en access Snakerahj Tablas planas 3 29-11-2007 18:53:59
Busqueda de registros con Sql muppett Conexión con bases de datos 8 24-09-2007 00:40:35
por que duplicidad de registros con clientdataset sin ingresar registros ...mysql Arturo MySQL 3 05-09-2006 18:39:37
Novato (Busqueda de registros con TEdit y DBGrid) enecumene Conexión con bases de datos 3 27-05-2006 20:04:12


La franja horaria es GMT +2. Ahora son las 07:03:18.


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