Los filtros estan muy bien para cosas simples, no los fuerces más de lo necesario.
Indiscutiblemente el query es más eficiente y flexible, a menos que tengas 200 campos en la misma tabla y la restricción del where deje pasar millones de registros.
Hablando en serio, si te parece engorroso andar con objetos Tquery prueba algo tan simple como:
Código Delphi
[-]
procedure CambiaQryA(qry:Tquery; sql: String);
begin
if qry = NIL then
qry := createqry(DTM.DtbPPal, sql)
else
begin
if qry.Active then
qry.Close;
qry.SQL.Clear;
qry.SQL.Text := sql;
qry.Open;
end;
end;
function CreateQry(dtb: TDatabase; SQL: String): TQuery;
begin
Result := Tquery.Create(NIL);
try
Result.DatabaseName := dtb.DatabaseName;
Result.SessionName := dtb.SessionName;
Result.SQL.Clear;
Result.SQL.Text := SQL;
Result.Prepare;
Result.Open;
except
FreeAndNil(Result);
raise;
end;
end;
Solamente tienes que llamar a 'CambiaQry' y despues asociar el Datasource del grid a esta query.
Acuerdate de usar Freeandnil(qry) al cerrar la ventana en cuestion.
Saludos