Ir ao conteúdo

Excel Excel com filtro entre data no acess


Ir à solução Resolvido por Basole,

Posts recomendados

Postado

Boa tarde. Gostaria de saber se alguém pode me ajudar. Preciso filtra meus dados na listbox com o valor entre datas, usando o Excel com aplicação no banco de dados no Acess, gostaria de saber como realizar o procedimento.

Primeiro seleciono o critério do filtro2 (empresa) e depois aplico os filtros 6 e 4 (data inicial e final). Tentei usar o comando betwen, mas não funcionou no meu projeto. 

image.thumb.png.8d1a952bb31f5a7f00299a4fef405a22.png

 

Atualmente uso o seguinte código dentro das textbox (filtro6 e 4) para buscar as data

 

 

Dim vBusca       As String
Dim LinhaListbox As Integer
Dim rsArray      As Variant
vBusca = filtro6.text
conectdb 'conectar ao banco de dados e carregar

rs.Open "Select * from TabNaoConformidades where DATACAD like'" & Replace(vBusca, "'", "''") & "'", db, 3, 3

Do Until rs.EOF
If Not rs.EOF Then
rsArray = rs.GetRows
With ListBox1
.Clear
.ColumnCount = 76
.ColumnWidths = "20;1;150;1;1;1;1;1;1;1;1;1;1;1;1;55;1;1;60;70;50;1;1;1;50;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;80;1;1;1;1;1;50;1;85;50;1;1;1;1;1;1;1;1;1;100;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1"
.List = TransposeArray(rsArray)
.ListIndex = -1
End With
End If
Loop
contagemdelinhas.Caption = ListBox1.ListCount & " registros encontrados"  'contagem de linhas
contagemdelinhas.Width = 144                                              ' ajusta a largura da label
FechaDb 'fehcar o banco
End Sub

 

Estarei anexado aqui o modelo de arquivo exemplo.

 

@Midori @Basole

 

Tentei aplicar esse código no projeto, mas sempre dar erro

 

Dim vBusca       As String
Dim LinhaListbox As Integer
Dim rsArray      As Variant
Dim datainicial As Databar, datafinal As Date

conectdb 'conectar ao banco de dados e carregar
rs.Open "Select * from TabAcao where DATADAACAO like'" & Me.filtro6.text & "'AND AREA  ='" & Me.filtro2.text & "'", db, 3, 3
rs.Open "Select * from TabAcao where DATADAACAO like'" & Replace(vBusca, "'", "''") & "'", db, 3, 3
rs.Open "SELECT * FROM TabAcao WHERE DATACADACAO Like'" & filtro2.text & "%'""AND DATADAACAO >= #" & datainicial & "#""AND DATADAACAO <= #" & datafinal & "#", db, adOpenKeyset, adLockReadOnly

Do Until rs.EOF
If Not rs.EOF Then
rsArray = rs.GetRows
With ListBox1
.Clear
.ColumnCount = 43
.ColumnWidths = "1;160;170;1;1;1;65;1;1;1;1;1;1;1;1;1;100;1;90;50;1;1;1;1;1;1;1;1;1;80;1;60;1;1;1;1;1;1;1;45;1"
.List = TransposeArray(rsArray)
.ListIndex = -1
End With
End If
Loop
contagemdelinhas.Caption = ListBox1.ListCount & " registros encontrados"  'contagem de linhas
contagemdelinhas.Width = 144                                              ' ajusta a largura da label
FechaDb 'fehcar o banco

 

Desde já, agradeço a ajuda de todos   😄 

Arquivoteste.zip

Postado

@josequali tente executar a cláusula desta forma: 

 

rs.Open "SELECT * FROM TabNaoConformidades WHERE DATACAD BETWEEN #" & _
                  filtro6.Text & "# AND #" & filtro4.Text & "# AND EMPRESA='" & _
                                                      Me.filtro2.Text & "'", db, 3, 3

 

E assim para os 3 filtros pois se filtrar separadamente, os dados filtrados obdecerão o criterio do ultimo filtro.

E coloque uma condição nos 3 controles filtro2,filtro6 e filtro4, no evento change para executar somente se os demais controles estiverem preenchidos. Exemplo: 

 

If Not filtro2.Text <> "" And _
Not filtro6.Text <> "" And _
Not filtro4.Text <> "" Then '.....
' ...........

 

 

  • Solução
Postado

@josequali nesta consulta de data, nenhum dos campos pode estar vazio, caso contrário vai gerar erros.

image.png.d6eb02868ad8e26879f3508c9456a04f.png

O comando Limpar filtros, deixa um dos critérios de data sem dados (vide img acima)

 

Neste caso é necessário o tratamento de erro, para não executar o comando SQL, caso algum campo envolvido não esteja vazio.

 

E tambem, atualizei o formato da data, para o americano, na clausula sql para não gerar inconsistências. 

 

rs.Open "SELECT * FROM TabNaoConformidades WHERE DATACAD BETWEEN #" & _
                  VBA.Format(filtro6.Text, "mm/dd/yyyy") & "# AND #" & _
                  VBA.Format(filtro4.Text, "mm/dd/yyyy") & _
                  "# AND EMPRESA='" & Me.filtro2.Text & "'", db, 3, 3

 

Postado

@josequalio recordset (rs), retorna verdadeiro caso não encontre dados no intervalo de data informado. 

Caso não atenda o critério, ou seja não encontre dados no intervalo de data, acredito que o ideal seria limpar o listbox:  

 

If Not rs.EOF Then
rsArray = rs.GetRows
With ListBox1
' ......................
'.........................
'.......................
'...................
End With
Else
Me.ListBox1.Clear
End If

 

Ou caso algum dos controles estejam vazios:

 

If filtro6.Text = "" Or _
   filtro4.Text = "" Then
Listbox1.Clear
Exit Sub
End If

 

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!