Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-05-2006
kia kia is offline
Miembro
 
Registrado: jul 2003
Posts: 78
Poder: 21
kia Va por buen camino
Filtro falla empleo IBX

Hola.
Estoy tratando de adaptar un aplicacion que empleaba bde, ahora empleo los IBX (MDO) y con paciencia va funcionando. Tengo una rejilla con un boton por el cual me filtraba los datos segun la columna donde se encuentre el cursor. Ahora no hay tabla sino un MDODataset,
cuando lo ejecuto observo que el filtrado lo ejecuta pero no me actualiza los datos en la rejilla. Sabeis donde he fallado..Soy novata y empleo D6 IB6.Gacias.

Código Delphi [-]
  procedure TV_equipo.Filtrar(Sender: TObject);
const
 TiposConComillas:set of TfieldType
 =[ftstring, ftdate, fttime,ftdatetime];
 var
 Campo, Operador, Valor:string;
 I:integer;
begin
  if sender= migual then
     operador:='='
   else if sender= mMayorigual then
     operador:='>='
   else if sender= mMenorigual then
     operador:='<='
   else
     operador:='<>';

  //extraemos nombre del campo
  Campo:=Rxdbgrid1.SelectedField.FieldName;
  //extraer y dar formato al valor
  if rxdbgrid1.SelectedField.DataType in TiposconComillas then
    begin
     if Rxdbgrid1.SelectedField.IsNull then //fecha en blanco
        valor :='null'
       else
        valor:=quotedstr(Rxdbgrid1.SelectedField.AsString); //string
     end
  else begin
  valor:=Rxdbgrid1.SelectedField.AsString ;
  for I := 1 to length(valor) do
     if valor[i]=DecimalSeparator then Valor[i]:='.';
  end ;
  //combinar nueva condicion con las anteriores
  If DMDatos.Dset_equipo.Filter='' then
   DMDatos.Dset_equipo.filter:=format('[%s] %s %s',[Campo,Operador, Valor])
  else
   DMDatos.Dset_equipo.filter:=format('%s AND [%s] %s %s',
   [DMDatos.Dset_equipo.filter,Campo,Operador, Valor]);
   //activar directamente el filtro
   mactivarfiltro.Checked:=true;
   DMDatos.Dset_equipo.Filtered:=true;
   DMDatos.Dset_equipo.RefreshSQL;
   label1.Caption:=inttostr(DMDatos.Dset_equipo.RecordCount);
   end;

Esta utilidad fue extraida de la "Cara oculta de D4"
__________________
Nadie nace enseñado, pide y se te dara.
Responder Con Cita
  #2  
Antiguo 11-10-2006
kia kia is offline
Miembro
 
Registrado: jul 2003
Posts: 78
Poder: 21
kia Va por buen camino
Thumbs up Siguiendo el hilo

Hola Las respuestas son voluntarias. Despues de muchas ayudas recibidas. no estaria bien que me las guardara. Asi pues solucionado el problema.Lo posteo para todos.Kia

Funciona de maravilla.
Código Delphi [-]
//Sustituir DMDatos.Dsetequipos por vuestro Dataset.
procedure TV_equipo.Filtrar(Sender: TObject);
const
 TiposConComillas:set of TfieldType
 =[ftstring, ftdate, fttime,ftdatetime];
 var
 Campo, Operador, Valor, sino:string;
 I:integer;
begin
  sino:='';
  if sender= migual then
     operador:='='
   else if sender= mMayorigual then
     operador:='>='
   else if sender= mMenorigual then
     operador:='<='
   else
     operador:='<>';

  //extraemos nombre del campo
  Campo:=Rxdbgrid1.SelectedField.FieldName;
  //extraer y dar formato al valor
  if rxdbgrid1.SelectedField.DataType in TiposconComillas then
     BEGIN
     if rxdbgrid1.SelectedField.DataType=ftdate then //fechas
        begin
        valor:=Rxdbgrid1.SelectedField.AsString;
        valor:=QuotedStr(FormatDateTime('yyyy/mm/dd',strtodate(valor)));
        end else begin
        valor:=quotedstr(Rxdbgrid1.SelectedField.AsString); //string
        end;
     if (Rxdbgrid1.SelectedField.IsNull)  //campos nulos
     and(rxdbgrid1.SelectedField.DataType<>ftdate)then
        begin
        valor :='is null';  //fechas, string,...
        if operador<>'=' then sino:='NOT ';
        operador:='';
        end ;
     END ELSE BEGIN
     valor:=Rxdbgrid1.SelectedField.AsString ;
     for I := 1 to length(valor) do
       if valor[i]=DecimalSeparator then Valor[i]:='.';
     END ;
  if mActivarfiltro.Checked=false then  // 1º filtrado
     BEGIN
     with DMDatos.Dsetequipos do
       begin
       Close;
       SelectSQL.Clear;
       SelectSQL.Add('SELECT * FROM equipo');
       SelectSQL.add('WHERE '+sino+ format('%s %s %s',[Campo,Operador,Valor]));
       SelectSQL.Add('ORDER BY '+campo);
       Open;
       end;
     END ELSE BEGIN
     with DMDatos.Dsetequipos do  //2º filtrado y siguientes
       begin
       Close;
       //Averiguamos la posicion de la linea de Ordenamiento
       for I := SelectSQL.Count -1 downto 0 do
       if pos('ORDER BY',uppercase(SelectSQL[i])) <>0 then
       SelectSQL.Delete(i);
       SelectSQL.add ('AND '+sino+ format('%s %s %s',[Campo,Operador, Valor]));
       SelectSQL.Add('ORDER BY '+Campo);
       //ShowMessage(DMDatos.Dsetequipos.SelectSQL.text); //monitor
       open;
       end;
     END;
  mactivarfiltro.Checked:=true;
  DMDatos.Dsetequipos.Last;
  label1.Caption:=inttostr(DMDatos.Dsetequipos.RecordCount);//contador
  end;
__________________
Nadie nace enseñado, pide y se te dara.
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
Ofertas de empleo Emilio Noticias 0 04-05-2006 10:10:12
Regulación de empleo santana Humor 1 30-11-2003 10:34:07
Busco empleo Delphi Man Varios 2 12-11-2003 16:36:42


La franja horaria es GMT +2. Ahora son las 09:35:05.


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