Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-04-2018
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 12
giulichajari Va por buen camino
Tres filtros para un clientdataset

Hola amigos,

Tengo una grilla de productos tipica de sistema de gestion y quiero filtrar por una o varias cosas al mismo tiempo:
Categoria, marca y un edit para el nombre del producto:

Código Delphi [-]
procedure actualizaGrilla;
begin
 if Form3.DBLCBCATEGORIA.KeyValue<>null then
    begin
      if Form3.DBLCBMARCA.KeyValue<>null then
        begin
          with DataModule1.cdsproductos do
            begin
                  begin
                  Filtered:=False;
                  Filter:='idcategoria=' + IntToStr( form3.DBLCBCATEGORIA.KeyValue) + 'and idmarca='+ Inttostr(Form3.DBLCBMARCA.KeyValue);
                  Filtered:=True;

                  end;

            end;
    end
    else
    begin
    with DataModule1.cdsproductos do
    begin
     Filtered:=False;
     Filter:='idcategoria=' + IntToStr(form3.DBLCBCATEGORIA.KeyValue);
     Filtered:=True;
    end;
    end;
    end
    else
    if Form3.DBLCBMARCA.KeyValue<>null then
        begin
        if Form3.DBLCBCATEGORIA.KeyValue<>null then
            begin
              with DataModule1.cdsproductos do
                begin
                      begin
                      Filtered:=False;
                      Filter:='idcategoria=' +inttostr( form3.DBLCBCATEGORIA.KeyValue) + 'and idmarca='+ inttostr(Form3.DBLCBMARCA.KeyValue);
                      Filtered:=True;

                      end;

                end;
            end
            else
            begin
              with DataModule1.cdsproductos do
                begin
                      begin
                      Filtered:=False;
                      Filter:='idmarca='+ InttoStr(Form3.DBLCBMARCA.KeyValue);
                      Filtered:=True;

                      end;

                end;
            end;
        end;


end;

Hice lo anterior para filtrar tanto por categoria como por marca, pero no se como aplicar el filtro por nombre de producto pero sobre la tabla ya filtrada por marca y/o categoria..

Alguien me puede ayudar?
Responder Con Cita
  #2  
Antiguo 21-04-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Código SQL [-]
select *
from tabla
where idcategoria= :aaa
and idmarca= :bbb
and nombreproducto= :ccc

¡Ah!, un clientdataset, no me hagas caso.
Responder Con Cita
  #3  
Antiguo 21-04-2018
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 12
giulichajari Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Código SQL [-]
select *
from tabla
where idcategoria= :aaa
and idmarca= :bbb
and nombreproducto= :ccc

¡Ah!, un clientdataset, no me hagas caso.
Claro la idea es no realizar una consulta sql nuevamente, el dataset trabaja en memoria.

Se puede hacer aunque no se si sea la forma mas adecuada(no es objetos obviamente)


Código Delphi [-]
procedure actualizaGrilla;
begin
if form3.ENOMBRE.Text='' then
begin
 if Form3.DBLCBCATEGORIA.KeyValue<>null then
    begin
      if Form3.DBLCBMARCA.KeyValue<>null then
        begin
          with DataModule1.cdsproductos do
            begin
                  begin
                  Filtered:=False;
                  Filter:='idcategoria=' + IntToStr( form3.DBLCBCATEGORIA.KeyValue) + 'and idmarca='+ Inttostr(Form3.DBLCBMARCA.KeyValue);
                  Filtered:=True;

                  end;

            end;
    end
    else
    begin
    with DataModule1.cdsproductos do
    begin
     Filtered:=False;
     Filter:='idcategoria=' + IntToStr(form3.DBLCBCATEGORIA.KeyValue);
     Filtered:=True;
    end;
    end;
    end
    else
    if Form3.DBLCBMARCA.KeyValue<>null then
        begin
        if Form3.DBLCBCATEGORIA.KeyValue<>null then
            begin
              with DataModule1.cdsproductos do
                begin
                      begin
                      Filtered:=False;
                      Filter:='idcategoria=' +inttostr( form3.DBLCBCATEGORIA.KeyValue) + 'and idmarca='+ inttostr(Form3.DBLCBMARCA.KeyValue);
                      Filtered:=True;

                      end;

                end;
            end
            else
            begin
              with DataModule1.cdsproductos do
                begin
                      begin
                      Filtered:=False;
                      Filter:='idmarca='+ InttoStr(Form3.DBLCBMARCA.KeyValue) + 'and nombre like ''%' + Form3.ENOMBRE.Text+'%''' ;
                      Filtered:=True;

                      end;

                end;
            end;
        end;
end
else
begin
   if Form3.DBLCBCATEGORIA.KeyValue<>null then
    begin
      if Form3.DBLCBMARCA.KeyValue<>null then
        begin
          with DataModule1.cdsproductos do
            begin
                  begin
                  Filtered:=False;
                  Filter:='idcategoria=' + IntToStr( form3.DBLCBCATEGORIA.KeyValue) + 'and idmarca='+ Inttostr(Form3.DBLCBMARCA.KeyValue) + 'and nombre like ''%' + Form3.ENOMBRE.Text+'%''' ;
                  Filtered:=True;

                  end;

            end;
    end
    else
    begin
    with DataModule1.cdsproductos do
    begin
     Filtered:=False;
     Filter:='idcategoria=' + IntToStr(form3.DBLCBCATEGORIA.KeyValue) + 'and nombre like ''%' + Form3.ENOMBRE.Text+'%''' ;
     Filtered:=True;
    end;
    end;
    end
    else
    if Form3.DBLCBMARCA.KeyValue<>null then
        begin
        if Form3.DBLCBCATEGORIA.KeyValue<>null then
            begin
              with DataModule1.cdsproductos do
                begin
                      begin
                      Filtered:=False;
                      Filter:='idcategoria=' +inttostr( form3.DBLCBCATEGORIA.KeyValue) + 'and idmarca='+ inttostr(Form3.DBLCBMARCA.KeyValue)  + 'and nombre like ''%' + Form3.ENOMBRE.Text+'%''' ;
                      Filtered:=True;

                      end;

                end;
            end
            else
            begin
              with DataModule1.cdsproductos do
                begin
                      begin
                      Filtered:=False;
                      Filter:='idmarca='+ InttoStr(Form3.DBLCBMARCA.KeyValue) + 'and nombre like ''%' + Form3.ENOMBRE.Text+'%''' ;
                      Filtered:=True;

                      end;

                end;
            end;
        end;
end;


end;

comparto
Responder Con Cita
  #4  
Antiguo 22-04-2018
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Código Delphi [-]
CDS.Filter := CDS.Filter + ' and ...';

Por cierto, intenta evitar el uso de With. Es como Facebook: en principio parece algo bueno, pero es el mismísimo Diablo.

Saludos.
Responder Con Cita
  #5  
Antiguo 22-04-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Al González Ver Mensaje
Por cierto, intenta evitar el uso de With. Es como Facebook: en principio parece algo bueno, pero es el mismísimo Diablo.
Muy bueno
Responder Con Cita
  #6  
Antiguo 23-04-2018
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Cita:
Empezado por Al González Ver Mensaje
Código Delphi [-]
CDS.Filter := CDS.Filter + ' and ...';
Por cierto, intenta evitar el uso de With. Es como Facebook: en principio parece algo bueno, pero es el mismísimo Diablo.
Saludos.
De acuerdo con Al. el código debería ser algo como:


Código Delphi [-]
Filtered:=False;        
Filter:='';          
if form3.ENOMBRE.Text<>'' then
   Filter:= Filter +Ifthen(Filter='','',' and ')+'nombre like '+QuotedStr('%' + Form3.ENOMBRE.Text+'%');            
   
if Form3.DBLCBCATEGORIA.KeyValue<>null then
   Filter:= Filter +Ifthen(Filter='','',' and ')+'idcategoria=' + IntToStr( form3.DBLCBCATEGORIA.KeyValue) ; 
   
 if Form3.DBLCBMARCA.KeyValue<>null then
   Filter:= Filter +Ifthen(Filter='','',' and ')+'idmarca='+ Inttostr(Form3.DBLCBMARCA.KeyValue);
Filtered:=True;

La función Ifthen la encuentras en: StrUtils, si el resultado es texto y en Math si el resultado es numérico (!!??)

Existe otra alternativay es programar el evento OnFilterRecord del Dataste. Ésta se utiliza cuando la condición es mas complicada, por ejemplo:

Código Delphi [-]
procedure DTM.QueryFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
 Accept:= (CumpleCondicion1(Parametros) and (Random(100) > 50) ) or (Nombre<>'');
end;
y el código para filtrar sería:

Código Delphi [-]
CDS.Filtered:= False;
CDS.Filtered:= True; //aquí dispara el evento
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Duda en Delphi 7 tres capas, clientdataset + datasetprovider moronoz Conexión con bases de datos 0 30-05-2014 17:55:24
Filtros para un TTable georgejg Oracle 12 08-03-2008 01:09:39
error filtros con like en clientdataset Raisencor Providers 1 09-09-2004 21:00:10
Consulta para tres tablas...... inexperto SQL 1 08-08-2004 07:59:04
Filtros en Clientdataset asirvent Conexión con bases de datos 16 24-11-2003 02:06:21


La franja horaria es GMT +2. Ahora son las 16:56:20.


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