SQL COM PARAMETRO
Boa tarde a todos,
Tenho o campo tipo DateTime
Base FireBird
Tentando fazer esse query funcionar não retorna os dados com a data atual
o que há de errado nessa query ?
Tenho o campo tipo DateTime
Base FireBird
Tentando fazer esse query funcionar não retorna os dados com a data atual
o que há de errado nessa query ?
Dim MovDoDia As String
MovDoDia = Now.Date.ToString
If Selecte_SomaDocto = 1 Then
Str_2 = [Ô]SELECT DESCRICAO, NUMERODOCTO, DTHRPGTO, NUMTERMINAL FROM TBVENDA_PGTO WHERE DTHRPGTO = @MovDoDia [Ô]
End If
Dim l As Integer
If Selecte_SomaDocto = 1 Then
Using cmd As New FbCommand(Str_2, con)
cmd.Parameters.Add(New FbParameter([Ô]@MovDoDia[Ô], MovDoDia))
Using dr As FbDataReader = cmd.ExecuteReader()
l = 0
Gr_0_Vd.Rows.Clear()
CountRow = 0
If dr.Read() Then [ô]If dr.HasRows Then
While dr.Read()
Gr_0_Vd.Rows.Add()
CountRow = CountRow + 1
Gr_0_Vd.Item(0, l).Value = CountRow
Gr_0_Vd.Item(1, l).Value = dr([Ô]DESCRICAO[Ô]).ToString
Gr_0_Vd.Item(2, l).Value = dr([Ô]NUMERODOCTO[Ô]).ToString
Gr_0_Vd.Item(3, l).Value = dr([Ô]DTHRPGTO[Ô]).ToString
Gr_0_Vd.Item(4, l).Value = dr([Ô]NUMTERMINAL[Ô]).ToString
l = l + 1
End While
Else
Gr_1_Vd.Rows.Clear()
MsgBox([Ô]Dados solicitados não localizados[Ô], vbCritical, [Ô]ATENÇÃO[Ô])
End If
CountRow = 0
End Using
End Using
End If
Citação::
Boa tarde a todos,
Tenho o campo tipo DateTime
Base FireBird
Tentando fazer esse query funcionar não retorna os dados com a data atual
o que há de errado nessa query ?Dim MovDoDia As String
MovDoDia = Now.Date.ToString
If Selecte_SomaDocto = 1 Then
Str_2 = [Ô]SELECT DESCRICAO, NUMERODOCTO, DTHRPGTO, NUMTERMINAL FROM TBVENDA_PGTO WHERE DTHRPGTO = @MovDoDia [Ô]
End If
Dim l As Integer
If Selecte_SomaDocto = 1 Then
Using cmd As New FbCommand(Str_2, con)
cmd.Parameters.Add(New FbParameter([Ô]@MovDoDia[Ô], MovDoDia))
Using dr As FbDataReader = cmd.ExecuteReader()
l = 0
Gr_0_Vd.Rows.Clear()
CountRow = 0
If dr.Read() Then [ô]If dr.HasRows Then
While dr.Read()
Gr_0_Vd.Rows.Add()
CountRow = CountRow + 1
Gr_0_Vd.Item(0, l).Value = CountRow
Gr_0_Vd.Item(1, l).Value = dr([Ô]DESCRICAO[Ô]).ToString
Gr_0_Vd.Item(2, l).Value = dr([Ô]NUMERODOCTO[Ô]).ToString
Gr_0_Vd.Item(3, l).Value = dr([Ô]DTHRPGTO[Ô]).ToString
Gr_0_Vd.Item(4, l).Value = dr([Ô]NUMTERMINAL[Ô]).ToString
l = l + 1
End While
Else
Gr_1_Vd.Rows.Clear()
MsgBox([Ô]Dados solicitados não localizados[Ô], vbCritical, [Ô]ATENÇÃO[Ô])
End If
CountRow = 0
End Using
End Using
End If
Qual é o tipo do campo DTHRPGTO na sua base de dados?
Se o tipo for timestamp ou date, sua variável deve ser do tipo Date e não do tipo string. Pelo que entendi do seu código, o campo é do tipo data e hora, então você deve passar a hora na consulta.
Outro ponto é a forma com que você está passando o parâmetro:
cmd.Parameters.Add(New FbParameter([Ô]@MovDoDia[Ô], MovDoDia))
Faz assim.
cmd.Parameters.Add([Ô]@MovDoDia[Ô], MovDoDia)
Citação::
:
Boa tarde a todos,
Tenho o campo tipo DateTime
Base FireBird
Tentando fazer esse query funcionar não retorna os dados com a data atual
o que há de errado nessa query ?Dim MovDoDia As String
MovDoDia = Now.Date.ToString
If Selecte_SomaDocto = 1 Then
Str_2 = [Ô]SELECT DESCRICAO, NUMERODOCTO, DTHRPGTO, NUMTERMINAL FROM TBVENDA_PGTO WHERE DTHRPGTO = @MovDoDia [Ô]
End If
Dim l As Integer
If Selecte_SomaDocto = 1 Then
Using cmd As New FbCommand(Str_2, con)
cmd.Parameters.Add(New FbParameter([Ô]@MovDoDia[Ô], MovDoDia))
Using dr As FbDataReader = cmd.ExecuteReader()
l = 0
Gr_0_Vd.Rows.Clear()
CountRow = 0
If dr.Read() Then [ô]If dr.HasRows Then
While dr.Read()
Gr_0_Vd.Rows.Add()
CountRow = CountRow + 1
Gr_0_Vd.Item(0, l).Value = CountRow
Gr_0_Vd.Item(1, l).Value = dr([Ô]DESCRICAO[Ô]).ToString
Gr_0_Vd.Item(2, l).Value = dr([Ô]NUMERODOCTO[Ô]).ToString
Gr_0_Vd.Item(3, l).Value = dr([Ô]DTHRPGTO[Ô]).ToString
Gr_0_Vd.Item(4, l).Value = dr([Ô]NUMTERMINAL[Ô]).ToString
l = l + 1
End While
Else
Gr_1_Vd.Rows.Clear()
MsgBox([Ô]Dados solicitados não localizados[Ô], vbCritical, [Ô]ATENÇÃO[Ô])
End If
CountRow = 0
End Using
End Using
End If
Qual é o tipo do campo DTHRPGTO na sua base de dados?
Se o tipo for timestamp ou date, sua variável deve ser do tipo Date e não do tipo string. Pelo que entendi do seu código, o campo é do tipo data e hora, então você deve passar a hora na consulta.
Outro ponto é a forma com que você está passando o parâmetro:cmd.Parameters.Add(New FbParameter([Ô]@MovDoDia[Ô], MovDoDia))
Faz assim.cmd.Parameters.Add([Ô]@MovDoDia[Ô], MovDoDia)
Bom, deu certo aqui.
Porém, ao solicitar uma data que não existe na tabela, não retorna a mensagem [Ô]DADOS NÃO LOCALIZADOS[Ô]
conforme o código abaixo
If dr.HasRows Then
While dr.Read()
Gr_0_Vd.Rows.Add()
CountRow = CountRow + 1
Gr_0_Vd.Item(0, l).Value = CountRow
Gr_0_Vd.Item(1, l).Value = dr([Ô]DESCRICAO[Ô]).ToString
Gr_0_Vd.Item(2, l).Value = dr([Ô]NUMERODOCTO[Ô]).ToString
Gr_0_Vd.Item(3, l).Value = dr([Ô]DTHRPGTO[Ô]).ToString
Gr_0_Vd.Item(4, l).Value = dr([Ô]NUMTERMINAL[Ô]).ToString
l = l + 1
End While
[txt-color=#e80000]Else
MsgBox([Ô]Dados não localizados[Ô])[/txt-color]
End If
Você está debugando para ver o que está sendo retornado no datareader?
Citação::
Você está debugando para ver o que está sendo retornado no datareader?
Se é que entendi, esta retornando com se tivesse valores.
Estou errado ?
Então, veja bem, no seu código você colocou:
Remova o dr.read(), não tem porque ele estar ali.
dr.read()
if dr.hasrow then
.....
Remova o dr.read(), não tem porque ele estar ali.
Citação::
Então, veja bem, no seu código você colocou:
dr.read()
if dr.hasrow then
.....
Remova o dr.read(), não tem porque ele estar ali.
então, percebi isso, removi. mas mesmo assim, não retorna como false
Isto ocorre porque ele está retornando um valor nulo, ou seja, ele entende que deve retornar algo a você, mesmo que não seja nada!
Por este motivo que o método hasrows está sempre retornando true, mas aà você pode contornar este problema com um if aqui:
Por este motivo que o método hasrows está sempre retornando true, mas aà você pode contornar este problema com um if aqui:
If dr.HasRows Then
While dr.Read()
Gr_0_Vd.Rows.Add()
CountRow = CountRow + 1
Gr_0_Vd.Item(0, l).Value = CountRow
Gr_0_Vd.Item(1, l).Value = dr([Ô]DESCRICAO[Ô]).ToString
Gr_0_Vd.Item(2, l).Value = dr([Ô]NUMERODOCTO[Ô]).ToString
Gr_0_Vd.Item(3, l).Value = dr([Ô]DTHRPGTO[Ô]).ToString
Gr_0_Vd.Item(4, l).Value = dr([Ô]NUMTERMINAL[Ô]).ToString
l = l + 1
End While
if CountRow <= 0 then
MsgBox([Ô]Dados não localizados[Ô])
end if
Else
MsgBox([Ô]Dados não localizados[Ô])
End If
Tópico encerrado , respostas não são mais permitidas