PROBLEMAS COM CONSULTA INTERVALO DE DATAS
tenho esse código e não está funcionando, alguem pode me ajudar? da um erro de sintaxe na data na expressão de consulta
Dim banco As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim instsql As String
Dim D1, D2 As Date
D1 = CDate(TxtData1)
D2 = CDate(TxtData2)
instsql = [Ô]SELECT * from entradas where dia between # & (D1) & # and # & (D2) & # ORDER BY id ASC[Ô]
rst.Open instsql, banco, adOpenDynamic, adLockOptimistic
Dim banco As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim instsql As String
Dim D1, D2 As Date
D1 = CDate(TxtData1)
D2 = CDate(TxtData2)
instsql = [Ô]SELECT * from entradas where dia between # & (D1) & # and # & (D2) & # ORDER BY id ASC[Ô]
rst.Open instsql, banco, adOpenDynamic, adLockOptimistic
BetWeen #[Ô] & Format$(D1, [Ô]mm/dd/yyyy[Ô]) & [Ô]# And #[Ô] & Format$(D2, [Ô]mm/dd/yyyy[Ô]) & [Ô]#
Não esqueça da formatação, access mm/dd/yyyy
Não esqueça da formatação, access mm/dd/yyyy
obrigado, mas agora aparece outro erro
[Ô]nenhum valor foi fornecido para um ou mais parametros necessarios[Ô]
[Ô]nenhum valor foi fornecido para um ou mais parametros necessarios[Ô]
Ve se ajuda:
rst.Open [Ô]select * from entradas where dia between [ô][Ô] & D1 & [Ô][ô] and [ô][Ô] & D2& [Ô][ô] [Ô],banco
rsSQL.Open [Ô]Select Dia FROM Entradas Where Dia = [ô][Ô] & Format(CDate(txtdata1)) & [Ô][ô] and [ô][Ô] & Format(CDate(txtdata2)) & [Ô][ô] Order by Id asc[Ô], cnSQL, adOpenStatic, adLockOptimistic
Colega qual é o banco de dados? e qual é o tipo do campo dia? e como inserindo os dados no campo dia? apenas dia, ou dia, mes e ano?
sendo o banco access o formato deve ser como o postado pelo colega NILSON ou seja entre (#) com format = mm/dd/yyyy
ex:
porém sendo outro banco como o mysql ou sql server a formatação e tratamento seria diferente, ambos seriam tratados entre ([ô]) e com a seguinte formatação YYYY-MM-DD.
quanto ao erro [Ô]nenhum valor foi fornecido para um ou mais parametros necessarios[Ô] , dee ser porque uma das datas ficou em branco.
sendo o banco access o formato deve ser como o postado pelo colega NILSON ou seja entre (#) com format = mm/dd/yyyy
ex:
instsql = [Ô]SELECT * FROM entradas WHERE dia BETWEEN #[Ô] & Format(D1,[Ô]mm/dd/yyyy[Ô]) & [Ô]# and #[Ô] & Format(D2,[Ô]mm/dd/yyyy[Ô]) & [Ô]# ORDER BY id ASC[Ô]
porém sendo outro banco como o mysql ou sql server a formatação e tratamento seria diferente, ambos seriam tratados entre ([ô]) e com a seguinte formatação YYYY-MM-DD.
quanto ao erro [Ô]nenhum valor foi fornecido para um ou mais parametros necessarios[Ô] , dee ser porque uma das datas ficou em branco.
sim o banco é access, o campo dia está como data/hora, e meu vb é em portugues, está dd/mm/yyyy, os dados sao inseridos como dta completa, dia mes e ano com 4 digitos
quando aparece o erro, os camposestao todos preenchidos inclusive se colocar o mouse em cima da instrução sql aparecem os valores inseridos no lugar da variavel o código todo do botao é esse:
[ô]-------general declarations---------------
Dim banco As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim instsql As String
Dim encontrou As Boolean
Dim D1 As Date
Dim D2 As Date
[ô]------button------
Private Sub CmdConsultarE_Click()
MfgC.Clear
MfgC.Rows = 2
D1 = CDate(TxtData1)
D2 = CDate(TxtData2)
If ChkData.Value = 1 And ChkTipo.Value = 0 Then
instsql = [Ô]SELECT * from entradas where dia between #[Ô] & Format$(D1, [Ô]dd/mm/yyyy[Ô]) & [Ô]# and #[Ô] & Format$(D2, [Ô]dd/mm/yyyy[Ô]) & [Ô]# ORDER BY id ASC[Ô]
rst.Open instsql, banco, adOpenDynamic, adLockOptimistic
encontrou = False
Do While Not rst.EOF
MfgC.Cols = 4
MfgC.ColWidth(0) = [Ô]300[Ô]
MfgC.ColWidth(1) = [Ô]300[Ô]
MfgC.ColWidth(2) = [Ô]500[Ô]
MfgC.ColWidth(3) = [Ô]800[Ô]
MfgC.Row = 0
MfgC.Col = 0
MfgC = [Ô]Data[Ô]
MfgC.Col = 1
MfgC = [Ô]Valor[Ô]
MfgC.Col = 2
MfgC = [Ô]Origem Principal[Ô]
MfgC.Col = 3
MfgC = [Ô]Origem Final[Ô]
With MfgC
.Rows = .Rows + 1
.Row = .Rows - 1
.TextMatrix(.Row, 0) = IIf(IsNull(rstC!dia), [Ô][Ô], rstC!dia)
.TextMatrix(.Row, 1) = IIf(IsNull(rstC!valor), [Ô][Ô], rstC!valor)
.TextMatrix(.Row, 2) = IIf(IsNull(rstC!origem1), [Ô][Ô], rstC!origem1)
.TextMatrix(.Row, 3) = IIf(IsNull(rstC!origem2), [Ô][Ô], rstC!origem2)
rst.MoveNext
encontrou = True
End With
Loop
If MfgC.Rows - 1 > 0 Then
MfgC.Row = 2
End If
If encontrou = False Then
MsgBox [Ô] Nenhum valor inserido nesse perÃodo de tempo![Ô], vbInformation, [Ô]Resultado de Pesquisa[Ô]
End If
rst.Close
End If
End Sub
quando aparece o erro, os camposestao todos preenchidos inclusive se colocar o mouse em cima da instrução sql aparecem os valores inseridos no lugar da variavel o código todo do botao é esse:
[ô]-------general declarations---------------
Dim banco As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim instsql As String
Dim encontrou As Boolean
Dim D1 As Date
Dim D2 As Date
[ô]------button------
Private Sub CmdConsultarE_Click()
MfgC.Clear
MfgC.Rows = 2
D1 = CDate(TxtData1)
D2 = CDate(TxtData2)
If ChkData.Value = 1 And ChkTipo.Value = 0 Then
instsql = [Ô]SELECT * from entradas where dia between #[Ô] & Format$(D1, [Ô]dd/mm/yyyy[Ô]) & [Ô]# and #[Ô] & Format$(D2, [Ô]dd/mm/yyyy[Ô]) & [Ô]# ORDER BY id ASC[Ô]
rst.Open instsql, banco, adOpenDynamic, adLockOptimistic
encontrou = False
Do While Not rst.EOF
MfgC.Cols = 4
MfgC.ColWidth(0) = [Ô]300[Ô]
MfgC.ColWidth(1) = [Ô]300[Ô]
MfgC.ColWidth(2) = [Ô]500[Ô]
MfgC.ColWidth(3) = [Ô]800[Ô]
MfgC.Row = 0
MfgC.Col = 0
MfgC = [Ô]Data[Ô]
MfgC.Col = 1
MfgC = [Ô]Valor[Ô]
MfgC.Col = 2
MfgC = [Ô]Origem Principal[Ô]
MfgC.Col = 3
MfgC = [Ô]Origem Final[Ô]
With MfgC
.Rows = .Rows + 1
.Row = .Rows - 1
.TextMatrix(.Row, 0) = IIf(IsNull(rstC!dia), [Ô][Ô], rstC!dia)
.TextMatrix(.Row, 1) = IIf(IsNull(rstC!valor), [Ô][Ô], rstC!valor)
.TextMatrix(.Row, 2) = IIf(IsNull(rstC!origem1), [Ô][Ô], rstC!origem1)
.TextMatrix(.Row, 3) = IIf(IsNull(rstC!origem2), [Ô][Ô], rstC!origem2)
rst.MoveNext
encontrou = True
End With
Loop
If MfgC.Rows - 1 > 0 Then
MfgC.Row = 2
End If
If encontrou = False Then
MsgBox [Ô] Nenhum valor inserido nesse perÃodo de tempo![Ô], vbInformation, [Ô]Resultado de Pesquisa[Ô]
End If
rst.Close
End If
End Sub
tire o order by da clausula.
valeu Marcelo, agora deu certo
Faça seu login para responder