Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error filtrar DBgrid d_x7 y Firedac (https://www.clubdelphi.com/foros/showthread.php?t=91923)

kia 03-06-2017 13:07:27

Error filtrar DBgrid d_x7 y Firedac
 
Hola. Estoy pasando una aplicacion en D6 a mi nuevo delphi XE7, uso base de datos Firebird y los nuevos componentes FireDAC.
Los datos el ddbgrid menus etc.. sin problema. Pero en el DBgrid empleo un filtro que me gustaria seguir utilizando por su comodidad, y me encuentro que no lo hace. La unica diferncia es que antes empleaba u Dataset y ahora un Query (Firedac).. diferncia en el lenguaje SQL quizas......?
Estoy cerrado...donde estoy fallando...Gracias. (este filtro no es mio me lo baje de una WEB y lo modifique).

Código Delphi [-]
  procedure  TV_Componentes.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:=dbgrid_c.SelectedField.FieldName;
  //extraer y dar formato al valor
  if dbgrid_c.SelectedField.DataType in TiposconComillas then
     BEGIN
     if dbgrid_c.SelectedField.DataType=ftdate then //fechas
        begin
        valor:=dbgrid_c.SelectedField.AsString;
        if valor='' then //fecha en blanco
           dbgrid_c.SelectedField.IsNull
           else   //fecha no blanco
           valor:=QuotedStr(FormatDateTime('mm/dd/yyyy',strtodate(valor)));
        end else begin
        valor:=quotedstr(dbgrid_c.SelectedField.AsString); //string
        end;
     if dbgrid_c.SelectedField.IsNull then//campos nulos
           begin
           valor :='is null';  //string,fechas...
           if operador<>'=' then sino:='NOT ';
           operador:='';
           end;
     END ELSE BEGIN
     valor:=dbgrid_c.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.FDQscom do
       begin
       Close;
       SQL.Clear;
       SQL.Add('SELECT * FROM WSCOM');
       SQL.add('WHERE '+sino+ format('%s %s %s',[Campo,Operador,Valor]));
       SQL.Add('ORDER BY '+campo);
       Open;
       end;
     END ELSE BEGIN
     with DMDatos.FDQscom do  //2º filtrado y siguientes
       begin
       Close;
       //Averiguamos la posicion de la linea de Ordenamiento
       for I := SQL.Count -1 downto 0 do
       if pos('ORDER BY',uppercase(SQL[i])) <>0 then
       SQL.Delete(i);
       SQL.add ('AND '+sino+ format('%s %s %s',[Campo,Operador, Valor]));
       SQL.Add('ORDER BY '+Campo);
       //ShowMessage(DMDatos.Dsetequimae.SelectSQL.text); //monitor dataset
       ShowMessage(DMDatos.FDQequimae.SQL.text); //monitor query
       open;
       end;
     END;
  mactivarfiltro.Checked:=true;
  DMDatos.FDQscom.Last;
  DMDatos.FDQscom.First;
  end;

kia 11-06-2017 14:09:23

El mismo
 
Hola.
Después de mucho buscar.... :confused:
después de mucho leer....:confused:
después de mucho probar...:confused:
No he logrado ordenar un dbgrid pulsando en el titulo de cada campo. Utilizando los Query de Firedac del Delphi XE7. (decepción total)v\||/
Alguien mas le ha pasado esto....?
Con las lib. Rx funcionaba a la primera.
Salu2.:mad:


La franja horaria es GMT +2. Ahora son las 09:14:36.

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