FILTRAR DADOS NO LISTVIEW

ARES 07/03/2010 20:24:50
#336267

Amigos,

Estou desenvolvendo uma aplicação com filtro por data no listview, entretanto ao filtrar os dados so é aceito quando o filtro é de um período longo, exemplo:

filtrando: 01 01 2010 a 01 01 2010 ele não retorna nada
filtrando: 01 01 2010 a 31 01 2010 ele retorna as informações do período



Public Sub preenche_lista()
On Error Resume Next
Dim newlist As ListItem
Dim vvalor1 As Currency
lista.ListItems.clear
vvalor1 = 0
Mycon.ConnectionString = [Ô]provider=microsoft.jet.oledb.4.0;[Ô] & [Ô] data source=[Ô] & App.Path & [Ô]\dbase\sos.mdb[Ô]
Mycon.Open


Set myrs = New Recordset
myrs.Open [Ô]Select *From cob001 where vencimento between #[Ô] & Format(Me.mskInicial, [Ô]dd/mm/yyyy[Ô]) & [Ô]# and #[Ô] & Format(Me.mskFinal, [Ô]dd/mm/yyyy[Ô]) & [Ô]# and ligador = 1 and consolidado <> 1 order by vencimento[Ô], Mycon, adOpenForwardOnly, adLockReadOnly
Do Until myrs.EOF
Set newlist = lista.ListItems.Add(, [Ô] Key [Ô] & myrs([Ô]id[Ô]), myrs([Ô]id[Ô]))
newlist.SubItems(1) = [Ô][Ô] & myrs([Ô]Tipo[Ô])
newlist.SubItems(2) = [Ô][Ô] & myrs([Ô]nf[Ô])
newlist.SubItems(3) = [Ô][Ô] & myrs([Ô]duplicata[Ô])
newlist.SubItems(4) = [Ô][Ô] & myrs([Ô]cliente[Ô])
newlist.SubItems(5) = Format(myrs!vvalor, [Ô]##,###0.00[Ô])
newlist.SubItems(6) = Format(myrs!vencimento, [Ô]dd/mm/yyyy[Ô])
newlist.SubItems(7) = [Ô][Ô] & myrs([Ô]ligador[Ô])
newlist.SubItems(8) = [Ô][Ô] & myrs([Ô]parcial[Ô])
vvalor1 = (vvalor1 + myrs!vvalor)
Me.txtTotal.Text = Format(vvalor1, [Ô]currency[Ô])
Me.txtTotal.Enabled = False
myrs.MoveNext
Loop
saida:

Mycon.Close
Set myrs = Nothing
ErrAbrir:
With Err
If .number <> 0 Then
.number = 0
GoTo saida

End If
End With
End Sub


o banco de dados utilizado é o access

amigos, desde já agradeço.
DANIKULL 07/03/2010 23:39:48
#336273
Resposta escolhida
Citação:

Amigos,

Estou desenvolvendo uma aplicação com filtro por data no listview, entretanto ao filtrar os dados so é aceito quando o filtro é de um período longo, exemplo:

filtrando: 01 01 2010 a 01 01 2010 ele não retorna nada
filtrando: 01 01 2010 a 31 01 2010 ele retorna as informações do período



Boa noite....

Você está fazendo sua consulta desta forma

myrs.Open [Ô]Select *From cob001 where vencimento between #[Ô] & Format(Me.mskInicial, [Ô]dd/mm/yyyy[Ô]) & [Ô]# and #[Ô] & Format(Me.mskFinal, [Ô]dd/mm/yyyy[Ô]) & [Ô]# and ligador = 1 and consolidado <> 1  order by vencimento[Ô], Mycon, adOpenForwardOnly, adLockReadOnly


O que não seria muito legal até por não gostar muito do BETWEEN, eu ja prefiro usar os operadores, tipo data >= á AND <= á, mais ou menos assim:



myrs.Open [Ô]Select * From cob001 where vencimento >= #[Ô] & Format(Me.mskInicial, [Ô]dd/mm/yyyy[Ô]) & [Ô]# and vencimento <= #[Ô] & Format(Me.mskFinal, [Ô]dd/mm/yyyy[Ô]) & [Ô]# and ligador = 1 and consolidado <> 1 order by vencimento[Ô], Mycon, adOpenForwardOnly, adLockReadOnly


Testa ai e veja se funciona, ok??
ARES 09/03/2010 12:28:24
#336417
DANIKULL, obrigado pela resposta.

fiz a sua atualização e funcionou perfeitamente para as datas acima do dia 10 para as datas inferiores, quando é feito a verificação, ele não encontra.

o problema está no armazenamento no banco de dados.

está arquivanfo como 3/3/2010 onde deveria ser 03/3/2010 ou 03/03/2010.

sabe me informar como formata-lo para que receba as informações da forma correta?

se possivel está conversão no vb6, pois eu uso maskara para os campos data.
ARES 09/03/2010 12:44:37
#336421
haa, estou usando access 2003 aqui para teste e no cliente usa access 2007
MARCELO.TREZE 09/03/2010 12:51:36
#336424
vejo que o uncio problema é a formatação de pesquisa

não deve ser dd/mm/yyyy e sim mm/dd/yyyy

então tente a seguinte alteração

myrs.Open [Ô]Select *From cob001 where (vencimento between #[Ô] & Format(Me.mskInicial, [Ô]mm/dd/yyyy[Ô]) & [Ô]# and #[Ô] & Format(Me.mskFinal, [Ô]mm/dd/yyyy[Ô]) & [Ô]#) and ligador = 1 and consolidado <> 1  order by vencimento[Ô], Mycon, adOpenForwardOnly, adLockReadOnly


detalhe o campo vencimento, no banco deve ser do tipo data/hora para que funcione

DANIKULL 09/03/2010 14:03:47
#336434
Citação:

:
DANIKULL, obrigado pela resposta.

fiz a sua atualização e funcionou perfeitamente para as datas acima do dia 10 para as datas inferiores, quando é feito a verificação, ele não encontra.

o problema está no armazenamento no banco de dados.

está arquivanfo como 3/3/2010 onde deveria ser 03/3/2010 ou 03/03/2010.

sabe me informar como formata-lo para que receba as informações da forma correta?

se possivel está conversão no vb6, pois eu uso maskara para os campos data.



Boa tarde.

Pra resolver de uma vez este problema, converta as variáveis em data com cDate, assim:

myrs.Open [Ô]Select * From cob001 where CDate(vencimento) >= #[Ô] & CDate(Me.mskInicial) & [Ô]# and CDate(vencimento) <= #[Ô] & CDate(Me.mskFinal) & [Ô]# and ligador = 1 and consolidado <> 1  order by vencimento[Ô], Mycon, adOpenForwardOnly, adLockReadOnly


Ok???

Tenta ai de novo, qualquer coisa você posta ai que agente vai achar o erro pra ter ajudar.....
ARES 13/04/2010 17:47:23
#339249
Amigos,

Obrigado pelas respostas.
Tópico encerrado , respostas não são mais permitidas