FILTRANDO DATAGRID
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
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
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:
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:
Valew!
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