PESQUISA COM INTERVALO INTERVALO DATAS

ANABON 10/03/2011 11:16:51
#367644
Olá pessual bom dia ... Mais uma x encontro em dificuldade para filtrar data no vb6....

Tenho um form com uma MSFlexGrid e dois MaskEdBox, incial e final ...

estou preenchendo a MSFlexGrid com o codigo:

Citação:

Private Sub MontarLista()
Dim RS As New ADODB.Recordset
Dim SQL As String
Dim Criterio As String

grddata_venda.TextMatrix(0, 0) = [Ô]Data[Ô]
grddata_venda.TextMatrix(0, 1) = [Ô]Descrição[Ô]
grddata_venda.TextMatrix(0, 2) = [Ô]Valor_Venda[Ô]
[ô]grddata_venda.TextMatrix(0, 3) = [Ô]Valor_Venda[Ô]

Criterio = Chr$(39) & txtinicial & txtfinal & [Ô]%[Ô] & Chr(39)

SQL = [Ô]SELECT data_venda, descrição, totalpreço FROM venda WHERE venda.data_venda Like [Ô] & Criterio & [Ô] ORDER BY data_venda[Ô]

[ô]On Error Resume Next

With RS

.Open SQL, cnSQL, adOpenForwardOnly, adLockReadOnly

If .EOF Then

MsgBox [Ô]Não há venda nesta data![Ô], vbExclamation, [Ô]Atenção[Ô]

Limpa
grddata_venda.TextMatrix(1, 0) = [Ô][Ô]
grddata_venda.TextMatrix(1, 1) = [Ô][Ô]
grddata_venda.TextMatrix(1, 2) = [Ô][Ô]
[ô]grddata_venda.TextMatrix(1, 3) = [Ô][Ô]
Else

Limpa

Do Until .EOF

grddata_venda.AddItem RS(0) & vbTab & RS(1) & vbTab & RS(2)

.MoveNext
Loop

grddata_venda.RemoveItem 1

End If

.Close

End With
End Sub



a ideia é pegar todo o registro em um intervalo de tempo (ex.: do dia 01/03 até o dia 04/03) e mostrar na grid, mas qndo seleciono a data ele só m mostra a 1° data (como no exemplo ele so me mostra o dia 1°) pq? onde ta o erro?

Desde já agradeço!!!!

MARCELO.TREZE 10/03/2011 11:31:16
#367649
é realmente o critério para consulta com data é diferente de texto, ou seja não se usa like

veja como deve ser

Criterio = [Ô]#[Ô] & Format(txtinicial,[Ô]mm/dd/yyy[Ô]) & [Ô]# And #[Ô] & Format(txtfinal,[Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô]

SQL = [Ô]SELECT data_venda, descrição, totalpreço FROM venda WHERE venda.data_venda Between [Ô] & Criterio & [Ô] ORDER BY data_venda[Ô]
ANABON 10/03/2011 11:36:51
#367651
Bom dia barros, obrigada pela dica, fiz como você indicou e ficou assim:

Citação:

SQL = [Ô]SELECT data_venda, descrição, totalpreço FROM venda Where Venda.Data_Venda Beetween [ô][Ô] & txtinicial & [Ô][ô] AND [ô][Ô] & txtfinal & [Ô][ô][Ô]



Mas ta dando erro: Erro'-time: [ô]2147217900 (80040e14) - erro de sintaxe (operador faltando) na expressão de consulta [ô] venda.data_venda beetween [Ô]AND[Ô].
ANABON 10/03/2011 11:42:26
#367654
Bom dia Marcelo-Treze ... obrigada pela dica

Fiz como sugeriu e ficou assim:

Citação:

Criterio = [Ô]#[Ô] & Format(txtinicial, [Ô]mm/dd/yyy[Ô]) & [Ô]# And #[Ô] & Format(txtfinal, [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô]

SQL = [Ô]SELECT data_venda, descrição, totalpreço FROM venda WHERE venda.data_venda Between [Ô] & Criterio & [Ô] ORDER BY data_venda[Ô]



Mas também ta dando erro: Run-time error [ô] erro de sintaxe na data na expressão de consulta [ô]venda.dat_venda Between ##AND##

porque?

Desde já agradeço
MSMJUDAS 10/03/2011 11:52:51
#367657
Coloca isso em baixo da sua query SQL, antes de executar o mesmo:

Sql = [Ô]......[Ô]
Debug.Print Sql

E veja como está seu select.
MARCELO.TREZE 10/03/2011 11:59:11
#367659
supostamente txtinicial e txtfinal não estão sendo preenchidos com a data

vc disse que possui dois maskeditbox com as datas quais os nomes deles?
ANABON 10/03/2011 12:14:26
#367662
bom dia MSMJUDAS, qndo coloquei oque vc m dissi em baixo da SQL
ficou entõa assim:
Citação:

SQL = [Ô]SELECT data_venda, descrição, totalpreço FROM venda WHERE venda.data_venda Between [Ô] & Criterio & [Ô] ORDER BY data_venda[Ô]
SQL = [Ô]......[Ô]
Debug.Print SQL

deu o seguinte erro: Intorução SQL Invalida. [ô]DELETE[ô], [ô]INSERT[ô], [ô]PROCEDURE[ô], [ô]SELECT[ô] ou [ô]UPDATE[ô] esperado
Se coloco antes do SQL não da erro, mas tbm não acontece nada....

Marcelo: sim estou usando dois maskeditbox, eles são o txtinicial e o txtfinal, e la no format dele ta dd-mmm-yy, fiz o teste e coloquei no lugar deles dois DTPicker, não da mais erro... mas tbm nada acontece, nem mesmo selecionando as datas....

obs: nos DTPicker coloquei montar lista nos eventos click e keypress e nada acontece!!!!!

MARCELO.TREZE 10/03/2011 12:19:11
#367664
faz o seginte coloque a data direto na query pra ver se o problema é no maskeditbox

Criterio = [Ô]#[Ô] & Format([Ô]01/01/2011[Ô], [Ô]mm/dd/yyy[Ô]) & [Ô]# And #[Ô] & Format([Ô]30/01/2011[Ô], [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô]

SQL = [Ô]SELECT data_venda, descrição, totalpreço FROM venda WHERE venda.data_venda Between [Ô] & Criterio & [Ô] ORDER BY data_venda[Ô]


veja se funciona

ps: coloque de preferencia um intervalo que exista em seu campo.

levo em consideração que o campo data_venda seja do tipo data/hora e o banco ACCESS

ANABON 10/03/2011 12:53:16
#367667
Sim no meu banco a data_venda ta como data/hora .......

Marcelo é o seguinte funcionou qr dizer em partes ... coloquei o codigo como me sujeriu tenho registros do dia 28/02/2011 a 10/03/2011 então no seu codigo adptei e ficou assim:

Citação:

Criterio = [Ô]#[Ô] & Format([Ô]28/02/2011[Ô], [Ô]mm/dd/yyy[Ô]) & [Ô]# And #[Ô] & Format([Ô]3/03/2011[Ô], [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô]

SQL = [Ô]SELECT data_venda, descrição, totalpreço FROM venda WHERE venda.data_venda Between [Ô] & Criterio & [Ô] ORDER BY data_venda[Ô]



ele me mostrou o registro entre essas duas datas

então com essa mesmo codigo apenas subistitui [Ô]28/02/2011[Ô] por txtinicial e [Ô]3/03/2011[Ô] por txtfinal ai deu erro de sintaxe como antes.... ainda em uma 2° tentativa troquei [Ô]28/02/2011[Ô] por DTPicker1 e [Ô]3/03/2011[Ô] por DTPicker2 e da o mesmo erro!!!!
CARLOSBINO 10/03/2011 13:15:01
#367668
Só para tirar a dúvida, coloca
msgbox txtinicial & [Ô] [Ô] & txtfinal 

Antes da variável critério, só para verificar os valores que estão sendo recebidos.
Página 1 de 2 [17 registro(s)]
Tópico encerrado , respostas não são mais permitidas