SELECT SUM

ARNALDOCRUZ 27/09/2010 10:42:42
#353914
Bom dia

colegas qual o metodo certo para pegar o retorno de um select sum no vbnet

porque eu faço como abaixo e hora passa hora dá um erro--->> conversion from type [ô]DBNULL to type [ô]String[ô] is not valid
Dim Resultado as String=[Ô][Ô]
Dim selcom As New FbCommand
selcom.Connection = Fbconn
selcom.CommandText = [Ô]Select sum(Valor) As Total From tblCaixa Where Data=Cast([ô][Ô] & CDate(Me.txtDataI.Text).ToString([Ô]MM/dd/yyyy[Ô]) & [Ô][ô] As Date) And Estilo=[ô]1[ô][Ô]
Resultado = selcom.ExecuteScalar---->>Aqui acontece o erro
If Resultado = [Ô][Ô] Then
Recebimento = 0
Else
Recebimento = FormatNumber(Resultado, 2)
End If

Outro jeito que também hora passa hora da erro

If selcom.ExecuteScalar.ToString = String.Empty Then ---->>Aqui acontece o erro
Recebimento = 0
Else
Recebimento= FormatNumber(Resultado, 2)
End If




NETMANIA 27/09/2010 11:01:24
#353919
Você tentou pegar a consulta e rodar direto no SQL Server para verificar se ocorre este erro?
ARNALDOCRUZ 27/09/2010 11:18:05
#353920
eu estou passado o sistema de vb6 para vbnet - BAco de dados Firebird

no vb6 está assim - e retona null que será recebimento=0

Set Rs1 = Cnn.Execute([Ô]Select sum(Valor) As Total From tblCaixa Where Data=Cast([ô][Ô] & Format(Me.DataI, [Ô]mm/dd/yyyy[Ô]) & [Ô][ô] As Date) And Estilo=[ô]1[ô][Ô])
If Not Rs1.EOF Then
If Rs1!Total = [Ô][Ô] Or IsNull(Rs1!Total) Then
Recebimento = 0
Else
Recebimento = Rs1!Total
End If
Else
Recebimento = 0
End If

JWCELYO 27/09/2010 11:32:17
#353921
			Dim cmd As New FbCommand([Ô]Select sum(Valor) As Total From tblCaixa Where Data=Cast([ô][Ô] & Format(Me.DataI, [Ô]mm/dd/yyyy[Ô]) & [Ô][ô] As Date) And Estilo=[ô]1[Ô])

Dim reader As FblDataReader = cmd.ExecuteReader()
While reader.Read()
msgbox( reader.GetString(0))
End While
ARNALDOCRUZ 27/09/2010 13:13:17
#353927
JWCELIO

fiz como a tua dica agora acontece o seguinte erro

na tabela existe registro até dia 16/08/2010

faço o select pelo dia 18/08/2010 portanto não deveria entrar no loop certo ?

selcom.CommandText = [Ô]Select sum(Valor) As Total From tblCaixa Where Data=Cast([ô][Ô] & CDate(Me.txtDataI.Text).ToString([Ô]MM/dd/yyyy[Ô]) & [Ô][ô] As Date) And Estilo=[ô]1[ô][Ô]
reader=selcom.Execute.Read
While reader.Read()
porem entra no loop e da erro pois vem registro como DBNULL
loop
SAMUKA 27/09/2010 13:24:11
#353930
ARNALDO, voce está está pedindo a soma apenas de um determinado dia ...

  Where Data=  


Uma sugestão seria colocar

Where Data <= 
THIGO 27/09/2010 13:29:34
#353931
Resposta escolhida
Amigo você pode usar o try veja o exemplo não sei se é a melhor maneira mas da certo

selcom.CommandText = [Ô]Select sum(Valor) As Total From tblCaixa Where Data=Cast([ô][Ô] & CDate(Me.txtDataI.Text).ToString([Ô]MM/dd/yyyy[Ô]) & [Ô][ô] As Date) And Estilo=[ô]1[ô][Ô]
reader=selcom.Execute.Read
While reader.Read()

[ô]Use o Trata erro
Try

msgbox( reader.GetString(0))

Catch ex As Exception
[ô]Aqui você pode deixar seguir por causa do registro null, caso querirar criar um contador e mostrar a qtd de registro null da também
End Try

loop


ouuu

Outra ideia é uma função para verificar se esta nulo nao deixando dar erro

Public Function TrataNulos(ByVal Value As Object) As String
Dim ret As String = string.Empty
If Not (Value = System.DBNull.Value) Then
ret = CType(Value,String)
Else
ret = [Ô][Ô]
End If
Return ret
End Function


Para usar simples
selcom.CommandText = [Ô]Select sum(Valor) As Total From tblCaixa Where Data=Cast([ô][Ô] & CDate(Me.txtDataI.Text).ToString([Ô]MM/dd/yyyy[Ô]) & [Ô][ô] As Date) And Estilo=[ô]1[ô][Ô]
reader=selcom.Execute.Read
While reader.Read()
TrataNulos(reader.GetString(0))
loop

flw
ARNALDOCRUZ 28/09/2010 08:33:44
#353966
Colegas resolvi como abaixo, já que um select sum nunca traz um valor vazio EOF.

Do While Reader.Read
If Reader([Ô]Total[Ô]).ToString <> [Ô][Ô] Then
TemLan = 1
VendaChe = FormatNumber(CDbl(Reader([Ô]Total[Ô])) - CDbl(DescVendaChe), 2)
End If
Loop
Tópico encerrado , respostas não são mais permitidas