FILTRANDO DATAGRID

JEFFORION 17/08/2012 21:12:37
#408122
Possuo um datagrid que me apresenta as informações dos ultimos seis mês, e dividido por data.
Tenho um filtro que me permite filtrar o mês que desejar, agora estou tentando fazer um filtro por data em cima do filtro do mês, mais não estou conseguindo, quando filtro ele perde o primeiro filtro.

Como posso fazer pra executar 2 filtros no mesmo datagrid ?

(Isso em VB6)


Private Sub txtDesigData_Change()

If Rss.State = 1 Then Rss.Close

Rss_Data.Open [Ô]Select * from designação where data like [ô][Ô] & txtDesigData & [Ô]%[ô][Ô]
Set DataGrid2.DataSource = Rss

End Sub
--------------------------------------------

Private Sub txtMes_Change()

If Rss.State = 1 Then Rss.Close

Rss_Mes.Open [Ô]Select * from designação where mês like [ô][Ô] & txtMes & [Ô]%[ô][Ô]
Set DataGrid2.DataSource = Rss

End Sub
PROFESSOR 19/08/2012 00:15:16
#408145
Resposta escolhida
Você está [Ô]recarregando a grade[Ô] e não [Ô]filtrando o recordset[Ô].
Além disto, seu filtro utiliza a cláusula like, de forma que, se o campo for do tipo Date, Time, ShortDate ou DateTime, além de se arriscar em relação ao formato de dia/mês/ano, a consulta [Ô]força[Ô] uma conversão implícita, tornando-se mais lenta.

Se prefere recarregar sempre, utilize uma variável estática para [Ô]acumular[Ô] as cláusulas de filtragem, ou melhor ainda, uma coleção ou um recordset virtual, verificando seu conteúdo e o adicionando á nova carga dos dados.

Caso contrário, se não faz questão de recarregar sempre, utilize o método Filter do objeto Recordset, como em:
[ô]...
meuRecordset.Filter = [Ô]CampoTexto = [ô][Ô] & ValorTextual & [Ô][ô] [Ô]
[ô]...


Como o caractere-coringa que está usando é o parêntesis, acredito que a base de dados seja o SQL Server. Neste caso, se preferir recarregar sempre, você pode ainda utilizar uma view com parâmetros de filtragem e o bom e velho ADODB.Command com parâmetros. Isso permite que você efetue a consulta sem ter de codificar [Ô]IFs[Ô] para saber quais cláusulas terá de adotar para a instrução SQL.
Neste caso, para a view, nas cláusulas WHERE, adote algo como em:

-- ...
CREATE VIEW [catalogo].[dbo].[consultaExemplo]
(
@Parametro1 AS VARCHAR(255) = NULL,
@Parametro2 AS VARCHAR(255) = NULL,
@Parametro3 AS DATETIME = NULL,
@Parametro4 AS DATETIME = NULL,
@Parametro5 AS BIT = NULL
) AS
SELECT
CAMPO1,CAMPO32,CAMPO4,CAMPO3,CAMPO48
FROM
TABELA1 AS A
INNER JOIN TABELA2 AS B ON A.CAMPO22=B.CAMPO22
-- ...
WHERE
(A.Campo1 = @Parametro1 OR @Parametro1 IS NULL)
AND (A.Campo2 LIKE @Parametro2 OR @Parametro2 IS NULL)
AND (A.Campo3 >= @Parametro3 OR @Parametro3 IS NULL)
AND (A.Campo3 <= @Parametro4 OR @Parametro4 IS NULL)
AND (B.Campo4 = @Parametro5 OR @Parametro5 IS NULL)
-- ...


Valew!
Tópico encerrado , respostas não são mais permitidas