PESQUISA COM INTERVALO INTERVALO DATAS
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!!!!
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[Ô]
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[Ô].
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
Sql = [Ô]......[Ô]
Debug.Print Sql
E veja como está seu select.
vc disse que possui dois maskeditbox com as datas quais os nomes deles?
ficou entõa assim:
Citação:deu o seguinte erro: Intorução SQL Invalida. [ô]DELETE[ô], [ô]INSERT[ô], [ô]PROCEDURE[ô], [ô]SELECT[ô] ou [ô]UPDATE[ô] esperadoSQL = [Ô]SELECT data_venda, descrição, totalpreço FROM venda WHERE venda.data_venda Between [Ô] & Criterio & [Ô] ORDER BY data_venda[Ô]
SQL = [Ô]......[Ô]
Debug.Print SQL
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!!!!!
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
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!!!!
msgbox txtinicial & [Ô] [Ô] & txtfinal
Antes da variável critério, só para verificar os valores que estão sendo recebidos.