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 07-10-2016
cristian22 cristian22 is offline
Miembro
NULL
 
Registrado: jun 2014
Posts: 18
Poder: 0
cristian22 Va por buen camino
Ayuda busqueda de case usando radiogroup

Hola buenas tardes. Realize una aplicacion con mysql -5 y delphi 2010, con componentes query de zeos". Tengo un formulario que utilizo un listado en el cual busco los productos utilizando un tedit llamado "eProductos" y estos datos van visualizando se en el dbgrid.
esta busqueda la realizo de la siguiente forma en un query tengo escrita la siguiente consulta

Código SQL [-]
 select * from productos where nombrepr LIKE :razon

luego en el boton buscar tengo escrito el siguiente codigo

Código Delphi [-]
 qProductos.ParamByName('razon').AsString := '%' +eProductos.text+ '%'

hasta aqui me funciona perfecto la busqueda ahora lo que necesito es filtrar esa busqueda dependiendo si el producto esta activo o no (para ello uso el campo estado de mi tabla producto)
creo un radiogroup con 3 opciones:

0:Activos
1:Bajas

para este punto hice lo siguiente borre la consulta del query e intente hacer lo siguiente en el evento onclick del boton buscar use el siguiente codigo
Código Delphi [-]
begin
qProductos.close;
qProductos.SQL.clear;
qProductos.SQL.Text:='Select * from producto';
qProductos.Open;
case radiog.ItemIndex of
0: qProductos.SQL.ADD('where estado=1')
1: qProductos.SQL.ADD('where estado=0')

al intentar esto me sale el siguiente error
project drugstore.exe raised exception class EDatabaseError with message 'qProductos:Cannot perform this operation on a closed dataset

tambien lo que habia intentado antes era escribir la siguiente consulta pero me daba error de escritura
Código Delphi [-]
0: begin
qProductos.SQL.ADD('where estado=1');
qProductos.SQL.ADD('where nombreproducto LIKE='+quotedstr(eProductos.text));

si podrian guiarme en este problema muchas gracias desde ya
Responder Con Cita
  #2  
Antiguo 08-10-2016
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Hola

Me parece que primero completas el SQL de tu consulta y luego le haces open.


Código Delphi [-]
begin qProductos.close; 
qProductos.SQL.clear; 
qProductos.SQL.Text:='Select * from producto'; 
case radiog.ItemIndex of 
0: qProductos.SQL.ADD(' where estado=1') ;
1: qProductos.SQL.ADD(' where estado=0');
end;
qProductos.Open;

Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #3  
Antiguo 08-10-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Otra opción:
Código Delphi [-]
...
begin
  if RadioGroup1.ItemIndex <> -1 then
  begin
    qProductos.Close;
    qProductos.SQL.Text := 'SELECT * FROM PRODUCTO WHERE ESTADO = :STATE';
    qProductos.ParamByName('STATE').Value := RadioGroup1.ItemIndex;
    qProductos.Open;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 08-10-2016
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Si. Con parametros es mejor

Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #5  
Antiguo 08-10-2016
cristian22 cristian22 is offline
Miembro
NULL
 
Registrado: jun 2014
Posts: 18
Poder: 0
cristian22 Va por buen camino
gracias

Cita:
Empezado por Caminante Ver Mensaje
Hola

Me parece que primero completas el SQL de tu consulta y luego le haces open.


Código Delphi [-]
begin qProductos.close; 
qProductos.SQL.clear; 
qProductos.SQL.Text:='Select * from producto'; 
case radiog.ItemIndex of 
0: qProductos.SQL.ADD(' where estado=1') ;
1: qProductos.SQL.ADD(' where estado=0');
end;
qProductos.Open;

Saludos
si era al final el open. Me funciona escribo algo y lo filtra el problema ahora es que si intento colocar de nuevo esta linea
Código Delphi [-]
case radiog.ItemIndex of 
0: begin
qProductos.SQL.ADD(' where estado=1') ;
qProductos.SQL.ADD('where nombreproducto LIKE='+'%'+quotedstr(eProductos.text)+'%'); // esta linea
end;
end;

cuando escribo un producto lo busco me lo muestra sin problema. El problema viene cuando si estoy escribiendo un producto y borro una letra me tira error de sintaxy haciendo referencia a que el error se encuentra en
Código SQL [-]
('where nombreproducto LIKE='+'%'+quotedstr(eProductos.text)+'%')
Responder Con Cita
  #6  
Antiguo 08-10-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Estas mezclando peras con manzanas, lo último nada tiene que ver con el RadioGroup de la consulta inicial.

Lo que estas intentando ahora es una búsqueda incremental y normalmente se la realiza en el evento OnChange de un cuadro de edición, ejemplo:
Código Delphi [-]
procedure TForm1.eProductosChange(Sender: TObject);
begin
  qProducto.Close;
  qProducto.SQL.Text := 'SELECT * FROM PRODUCTO WHERE NOMBREPRODUCTO LIKE :NAME';
  qProducto.ParamByName('NAME').AsString := '%' + TEdit(Sender).Text + '%';
  qProducto.Open;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 08-10-2016
cristian22 cristian22 is offline
Miembro
NULL
 
Registrado: jun 2014
Posts: 18
Poder: 0
cristian22 Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Estas mezclando peras con manzanas, lo último nada tiene que ver con el RadioGroup de la consulta inicial.

Lo que estas intentando ahora es una búsqueda incremental y normalmente se la realiza en el evento OnChange de un cuadro de edición, ejemplo:
Código Delphi [-]
procedure TForm1.eProductosChange(Sender: TObject);
begin
  qProducto.Close;
  qProducto.SQL.Text := 'SELECT * FROM PRODUCTO WHERE NOMBREPRODUCTO LIKE :NAME';
  qProducto.ParamByName('NAME').AsString := '%' + TEdit(Sender).Text + '%';
  qProducto.Open;
end;

Saludos
yo este modelo de busqueda lo tenia antes y es la linea que puse cuando inicie el tema
Código Delphi [-]
qProductos.ParamByName('razon').AsString := '%' +eProductos.text+ '%'
pero esto solo me va trayendo las coincidencias lo que yo necesito es tambien que siga funcionando de la misma forma pero que tenga encuenta la opcion que esta marcada en el radiogroup y me valla filtrando dichos datos dependiendo de la opción que este marcada, es decir si yo tengo marcada la opcion "activado" y voy escribiendo ej:"fanta" me valla trayendo estos datos si esta con estado 1 osea activado y si marco "bajas" y al escribir lo mismo me muestre si existe dichos datos o no.No se si esto es posible o solo puede filtrarse la búsqueda al hacer clikear el boton
muchas gracias por tomarse el tiempo en ayudarme
Responder Con Cita
  #8  
Antiguo 08-10-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Ahora si entiendo la relación...
Código Delphi [-]
...

procedure TForm1.eProductoChange(Sender: TObject);
begin
  if RadioGroup1.ItemIndex <> -1 then
  begin
    qProducto.Close;
    qProducto.SQL.Clear;
    qProducto.SQL.Add('SELECT * FROM PRODUCTO');
    qProducto.SQL.Add('WHERE ESTADO = :STATE');
    qProducto.SQL.Add('AND NOMBREPRODUCTO LIKE :NAME');
    qProducto.ParamByName('STATE').Value := 1 - RadioGroup1.ItemIndex; // (**)
    qProducto.ParamByName('NAME').AsString := '%' + TEdit(Sender).Text + '%';
    qProducto.Open;
  end;
end;
(**) linea que reemplaza a:
Cita:
Empezado por cristian22 Ver Mensaje
Código Delphi [-]
case radiog.ItemIndex of 
0: qProductos.SQL.ADD(' where estado=1') ;
1: qProductos.SQL.ADD(' where estado=0');
end;
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 08-10-2016
cristian22 cristian22 is offline
Miembro
NULL
 
Registrado: jun 2014
Posts: 18
Poder: 0
cristian22 Va por buen camino
Muchas Gracias

Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Ahora si entiendo la relación...
Código Delphi [-]
...

procedure TForm1.eProductoChange(Sender: TObject);
begin
  if RadioGroup1.ItemIndex <> -1 then
  begin
    qProducto.Close;
    qProducto.SQL.Clear;
    qProducto.SQL.Add('SELECT * FROM PRODUCTO');
    qProducto.SQL.Add('WHERE ESTADO = :STATE');
    qProducto.SQL.Add('AND NOMBREPRODUCTO LIKE :NAME');
    qProducto.ParamByName('STATE').Value := 1 - RadioGroup1.ItemIndex; // (**)
    qProducto.ParamByName('NAME').AsString := '%' + TEdit(Sender).Text + '%';
    qProducto.Open;
  end;
end;
(**) linea que reemplaza a:


Saludos
muchas gracias. funciona perfecto mil gracias de verdad
Responder Con Cita
  #10  
Antiguo 08-10-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por cristian22 Ver Mensaje
muchas gracias. funciona perfecto mil gracias de verdad
Me alegra que te haya servido

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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 NO case sensitive Rofocale Varios 4 26-10-2010 21:45:10
Ayuda en busqueda usando ADO Victor Vega SQL 6 06-09-2007 06:21:35
Busqueda usando un DBLookupComboBox esimon OOP 19 08-10-2006 22:31:42
Búsqueda usando un índice con ADO. vpepen Conexión con bases de datos 9 03-02-2005 14:32:32
Ayuda con RadioGroup miguel_fr Varios 2 23-04-2004 17:29:42


La franja horaria es GMT +2. Ahora son las 21:32:21.


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