SQL COM PARAMETRO

MOREIRA 20/09/2017 12:52:26
#476666
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
GUIMORAES 20/09/2017 13:43:49
#476667
Resposta escolhida
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) 
MOREIRA 20/09/2017 14:47:07
#476668
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

GUIMORAES 20/09/2017 16:10:13
#476670
Você está debugando para ver o que está sendo retornado no datareader?
MOREIRA 20/09/2017 16:33:23
#476672
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 ?



GUIMORAES 20/09/2017 17:05:00
#476674
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.
MOREIRA 20/09/2017 17:33:56
#476676
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
GUIMORAES 20/09/2017 17:50:56
#476677
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:

 

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