PDA

Ver la Versión Completa : Error filtrar DBgrid d_x7 y Firedac


kia
03-06-2017, 13:07:27
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).

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
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: