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 13-08-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Optimizar el sgte codigo

Hola amigos... quiero hacer una consulta de como podria optimar más este código...

Datos -> Formulario de tipo DataModule
AQ_Select -> ADOQuery
vBus -> TEdit
CB_Buscar -> ComboBox

Código Delphi [-]
     Datos.AQ_Select.Close;
     Datos.AQ_Select.SQL.Clear;
     Datos.AQ_Select.SQL.Add('Select * From Socio');
     If CB_Buscar.ItemIndex = 0 Then
        Begin
             Datos.AQ_Select.SQL.Add('Where Soc_Rut Like'+QuotedStr('%'+vBus.Text+'%'));
        End
     Else If CB_Buscar.ItemIndex = 1 Then
        Begin
             Datos.AQ_Select.SQL.Add('Where Soc_Nombre Like'+QuotedStr('%'+vBus.Text+'%'));
        End
     Else If CB_Buscar.ItemIndex = 2 Then
        Begin
             Datos.AQ_Select.SQL.Add('Where Soc_Apellido Like'+QuotedStr('%'+vBus.Text+'%'));
        End;
     Datos.AQ_Select.Open;

La idea es que tengo un ComboBox, en donde tengo 3 Campos... entonces yo puedo selecionar si quiero buscar a un Socio por Rut (DNI), Nombre o Apellido, entonces utilizo un TEdit y ejecuto la consulta a través de un ADOQuery

Si bien la consulta me funciona super, es para evitar tener que escribir preguntas del Tipo If,.... y si en caso me llegara a tocar una consulta parecidad pero con unos 20 campos..(exageracion)
__________________
BlueSteel
Responder Con Cita
  #2  
Antiguo 13-08-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
casualmente tengo un codigo como eso:

1.- Cargo los datos en un combo box
2.- Al ejecutar la busqueda leo el campo desde ese combo y lo concateno en la consulta

1.-


Código Delphi [-]
//Carga un combo box con los campos disponibles
procedure TBusquedas.CargarLista;
var
   nIdx: integer;
begin
   cbCampos.Items.Clear;
   for nIdx := 0 to sqBusqueda.FieldCount - 1 do
      cbCampos.Items.Add(sqBusqueda.Fields[nIdx].FieldName);
   cbCampos.Text := sqBusqueda.Fields[0].FieldName;
end;

2.-

Al hacer click en el boton Establece el filtro de la tabla
Código Delphi [-]
   if txValor.Text = '' then
   begin
      sqBusqueda.Active := False;
      sqBusqueda.SQL.Clear;
      sqBusqueda.SQL.Add(Original);
      sqBusqueda.Active := True;
   end
   else
   begin
      sqBusqueda.Active := False;
      sqBusqueda.SQL.Clear;
      sqBusqueda.SQL.Add(Original);
      sqBusqueda.SQL.Add(' where ' + cbCampos.Text + ' Like ''%' + txValor.Text + '%''');
      sqBusqueda.SQL.Add(' order by ' + cbCampos.Text);
      sqBusqueda.Active := True;
   end;

Si no entendi mal esto es lo que buscas
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #3  
Antiguo 13-08-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Y no lo has pensado en hacer con filtros?.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 14-08-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Con esto se construye un procedimiento el cual lo puedo llamar en otras ocasione.
Código Delphi [-]
procedure TFOrdProd.ConstruyeFiltro;
begin
 if (CB_Buscar.Text <> 'Rut')  then
        begin
           QOrdProd.Filter := 'Soc_Rut = '+QuotedStr('%'+vBus.Text+'%');
           QOrdProd.Filtered := True;
        end
        else if (CBUsuarios.Text = 'Nombre')  then
             begin
          QOrdProd.Filter := 'Soc_Nombre = '+QuotedStr('%'+vBus.Text+'%');
          QOrdProd.Filtered := True;
             end
         else if (CBUsuarios.Text = 'Apellido')  then
             begin
         QOrdProd.Filter := 'Soc_Apellido = '+QuotedStr('%'+vBus.Text+'%');
          QOrdProd.Filtered := True;
           end;
end;
Ya sabes, solo una idea mas.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 14-08-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
const Values: array[0..2] of string = ('Soc_Rut', 'Soc_Nombre', 'Soc_Apellido');
begin
 Datos.AQ_Select.Close;
 Datos.AQ_Select.SQL.Clear;
 Datos.AQ_Select.SQL.Add('select * from Socio where ' + Values[CB_Buscar.ItemIndex] + ' like ''%' + vBus.Text + '%''');
 Datos.AQ_Select.Open;
end;
Responder Con Cita
  #6  
Antiguo 14-08-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Gracias a todos

mañana cuando llegue a mi oficina.. probare lo que me entregarón....
__________________
BlueSteel
Responder Con Cita
  #7  
Antiguo 14-08-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Hola cHackAllJusto andaba buscando algo parecido.. me funciono perfecto...No he probado los otros códigos.. pero veo que estan weno... si tengo tiempo los probaré..
__________________
BlueSteel
Responder Con Cita
  #8  
Antiguo 14-08-2007
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
Código Delphi [-]
     Datos.AQ_Select.Close;
     Datos.AQ_Select.SQL.Clear;
     Datos.AQ_Select.SQL.Add('Select * From Socio');
     case CB_Buscar.ItemIndex of
          0: Datos.AQ_Select.SQL.Add('Where Soc_Rut Like'+QuotedStr('%'+vBus.Text+'%'));
          1:  Datos.AQ_Select.SQL.Add('Where Soc_Nombre Like'+QuotedStr('%'+vBus.Text+'%'));
          2:  Datos.AQ_Select.SQL.Add('Where Soc_Apellido Like'+QuotedStr('%'+vBus.Text+'%'));
          else begin showmessage('No se encuentra el tipo');
                        exit;
                end   ;
      End;
     Datos.AQ_Select.Open;

Bueno yo veo que ya lo tenes resuelto, pero otra forma para que sea un poco mejor puede ser esta,
ya que el valo que viene es un integer, podes utilizar un CASE, y de esta menera no se ejecuta todo el Siclo de comparaciones de los IF.
En caso de que el index no sea valido, muestra un mensaje y sale!

saludos y bueno solo es otra alternativa
Responder Con Cita
  #9  
Antiguo 14-08-2007
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Y no lo has pensado en hacer con filtros?.
Saludos
con los Filtros tenes que tener cuidado, ya que se ejecutan sobre la Tabla, es decir, Si lo haces sobre una tabla de access y tenes el filtro aplicado con la conexion abierta, y abris la tabla con el access vas a notar que los datos estan filtrados.

Saludos
Responder Con Cita
  #10  
Antiguo 14-08-2007
Avatar de Luis M.
[Luis M.] Luis M. is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Ripollet - Barcelona
Posts: 212
Poder: 20
Luis M. Va por buen camino
Thumbs up

Cita:
Empezado por cHackAll Ver Mensaje
Código Delphi [-]Código Delphi [-]procedure TForm1.Button1Click(Sender: TObject);
const Values: array[0..2] of string = ('Soc_Rut', 'Soc_Nombre', 'Soc_Apellido');
begin Datos.AQ_Select.Close; Datos.AQ_Select.SQL.Clear; Datos.AQ_Select.SQL.Add('select * from Socio where ' + Values[CB_Buscar.ItemIndex] + ' like ''%' + vBus.Text + '%''');
Datos.AQ_Select.Open;
end;
Muy bueno...
Nunca se me había ocurrido (soy aprendiz de novato).
Este me lo guardo.
Un saludo.
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
optimizar codigo acrophet Varios 5 16-01-2011 23:28:39
Optimizar con Case XXX of TIKIMORE Varios 9 10-07-2010 17:21:20
Optimizar Paradox en red Sick boy Conexión con bases de datos 0 26-02-2005 13:31:48
Imprimir solamente 6 filas en RAVE y continuar en la sgte. hoja Luis Impresión 1 05-11-2004 12:16:18
Como realizar la sgte Consulta o Procedimiento jgutti SQL 1 06-07-2004 09:18:46


La franja horaria es GMT +2. Ahora son las 00:28:44.


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