PESQUISAR DATA NO MYSQL COM VB
Ola pessoal tenho um sistema feito em vb 6.0 e uso o mysql 4.1.22 como banco de dados, e utilizo mySql Connector 3.51 para fazer a conexão to com um problema na hora de fazer pesquisas por data tipo assim quando eu informo uma data distante por exemplo [ô]01/08/2009[ô] a [ô]31/08/2009[ô] ele traz o resultado da pesquisa certinho agora por exemplo se eu quero uma unica data [ô]26/08/2009[ô] a [ô]26/08/2009[ô] ele não fala que o banco não encontrou resultado algum. Estou fazendo da seguinte maneira.
Dim adores As New DBRecordset
Dim indice As Integer
Dim DataInicial As String
Dim DataFinal As String
If Not FormConsiste(Me) Then Exit Sub
DataInicial = Me.Controls((FormControl.GetIndex([Ô]PesDatIni[Ô])))
DataFinal = Me.Controls(FormControl.GetIndex([Ô]PesDatFim[Ô])).Text
DataFinal = (Year(DataFinal) & [Ô]-[Ô] & Month(DataFinal) & [Ô]-[Ô] & Day(DataFinal))
DataInicial = (Year(DataInicial) & [Ô]-[Ô] & Month(DataInicial) & [Ô]-[Ô] & Day(DataInicial))
Dim Sql As String
Sql = [Ô]SELECT * FROM Processos WHERE ProDatIni >= [ô][Ô] & Format(DataInicial, [Ô]YYYY-MM-DD HH:MM:SS[Ô]) & _
[Ô][ô] OR ProDatFim <= [ô][Ô] & Format(DataFinal, [Ô]YYYY-MM-DD HH:MM:SS[Ô]) & [Ô][ô] AND ProSta = 1 Order by ProDatIni[Ô]
adores.OpenRecordset DBCnx, Sql, CTForwardOnly, CLServer, LTReadOnly
lstField(LstIdxPro).ListItems.Clear
indice = 1
If adores.EOF Then
MsgAtt [Ô]Não foram encontrados processos neste periodo[Ô]
Exit Sub
Else
Do While Not adores.EOF
lstField(LstIdxPro).ListItems.Add , , adores.GetFieldValue([Ô]ProRec[Ô])
lstField(LstIdxPro).ListItems.Item(indice).Tag = adores.GetFieldValue([Ô]ProCod[Ô])
lstField(LstIdxPro).ListItems.Item(indice).SubItems(1) = adores.GetFieldValue([Ô]ProDatIni[Ô])
lstField(LstIdxPro).ListItems.Item(indice).SubItems(2) = adores.GetFieldValue([Ô]ProDatFim[Ô])
lstField(LstIdxPro).ListItems.Item(indice).SubItems(3) = Format(adores.GetFieldValue([Ô]ProPesPro[Ô]), [Ô]00000[Ô])
lstField(LstIdxPro).ListItems.Item(indice).SubItems(4) = Format(adores.GetFieldValue([Ô]ProPesRea[Ô]), [Ô]00000[Ô])
lstField(LstIdxPro).ListItems.Item(indice).SubItems(5) = adores.GetFieldValue([Ô]ProUsr[Ô])
adores.MoveNext
indice = indice + 1
Loop
End If
ja tentou algo parecido com isso?
select * from boleto where datavencimento between [ô]2009-09-10[ô] and [ô]2009-09-10
select * from boleto where datavencimento between [ô]2009-09-10[ô] and [ô]2009-09-10
Nao mas são dois campos diferente funcionaria dataIncial e DataFinal
CJMCARDOSO vc ja verificou se no dia 26 vc tem registro na tabela boleto,
outra coisa vc tá colocando horas no select entao tera que ter um registro que consida data e hora para ele trazer o resultado verifica isso e tira a hora do select
outra coisa vc tá colocando horas no select entao tera que ter um registro que consida data e hora para ele trazer o resultado verifica isso e tira a hora do select
Já tirei e tentei usar como o exemplo do que amigo me passou
Detalhe no Immediate quando vou depurar a query ele me traz assim tirei a hora no formato
SELECT * FROM Processos WHERE ProDatIni >= [ô]2009-09-01[ô] and ProDatFim <= [ô]2009-09-03[ô] AND ProSta = 1 Order by ProDatIni
SELECT * FROM Processos WHERE ProDatIni >= [ô]2009-09-01[ô] and ProDatFim <= [ô]2009-09-03[ô] AND ProSta = 1 Order by ProDatIni
realmente o problema está na sua query, vamos a duas opções
primeira
segunda maneira
teste ambas alterações
primeira
Sql = [Ô]SELECT * FROM Processos WHERE (ProDatIni >= [ô][Ô] & Format(DataInicial, [Ô]YYYY-MM-DD HH:MM:SS[Ô]) & _
[Ô][ô] and ProDatFim <= [ô][Ô] & Format(DataFinal, [Ô]YYYY-MM-DD HH:MM:SS[Ô]) & [Ô][ô] ) AND ProSta = 1 Order by ProDatIni[Ô]
segunda maneira
Sql = [Ô]SELECT * FROM Processos WHERE (ProDatIni Between [ô][Ô] & Format(DataInicial, [Ô]YYYY-MM-DD HH:MM:SS[Ô]) & _
[Ô][ô] and [ô][Ô] & Format(DataFinal, [Ô]YYYY-MM-DD HH:MM:SS[Ô]) & [Ô][ô]) AND ProSta = 1 Order by ProDatIni[Ô]
teste ambas alterações
cara as 1o. ela vai só com em vez de colocar and colocar or ficando assim
[th]
mas desse jeito qualquer data que eu colcar ele traz a segunda maneira nao me retorna valor nenhum
Query | [/th]
Sql = [Ô]SELECT * FROM Processos WHERE (ProDatIni >= [ô][Ô] & Format(DataInicial, [Ô]YYYY-MM-DD[Ô]) & _ [Ô][ô] or ProDatFim <= [ô][Ô] & Format(DataFinal, [Ô]YYYY-MM-DD[Ô]) & [Ô][ô] ) AND ProSta = 1 Order by ProDatIni[Ô] |
mas desse jeito qualquer data que eu colcar ele traz a segunda maneira nao me retorna valor nenhum
qual o formato do campo no banco de dados? Date ou datetime?
Detalhe fiz uns teste agora no sistema troquei o campo de dateTime para date e troce certinho só que cliente quer que coloque a h e minuto só que na pesquisa do relatorio pode ser apenas pela data alguem pode me ajudaer
faz o seguinte teste no format troque
HH:MM:SS por HH:NN:SS
N representa segundos senão se confunde com M de mes
faz esta alteração usando o campo como datetime
HH:MM:SS por HH:NN:SS
N representa segundos senão se confunde com M de mes
faz esta alteração usando o campo como datetime
Tópico encerrado , respostas não são mais permitidas