Descobri recentemente que o TADODataSet e seus descendentes, baseados no ADO Recordset, têm uma peculiaridade na utilização de filtros.
O filtro
(campo1 = valor1 OR campo1 = valor2) AND campo2 = 'ABCD'
simplesmente não funciona!!!
Não pode haver agrupamento de cláusulas usando o OR e posteriormente agrupando-as com outras cláusulas usando o AND. Teria que reescrever o filtro com:
(campo1 = valor1 AND campo2 = 'ABCD')
OR (campo1 = valor2 AND campo2 = 'ABCD')
Isto complica bastante a vida do desenvolvedor que, como eu, criou um "editor visual genérico" de filtros que se aplica a qualquer descendente do TDataSet.
Maneira rápida de fugir do problema: Utilize um ClientDataSet ligado num DataSetProvider, que por sua vez está ligado no ADODataSet (ou ADOQuery) original. E passe a usar o ClientDataSet no lugar do ADODataSet. O primeiro - e também o segundo - exemplo de filtro funciona perfeitamente no ClientDataSet!
Mais uma vez o ClientDataSet se mostrando superior ao ADO Recordset.
No comments:
Post a Comment