CONFLITO NO TIPO DE OPERANDO INT É INCOMP COM DATA

SANROMAN 07/04/2014 12:46:49
#436976
Olá amigos

Tenho o seguinte código:

Private Sub alterarFormaPgto()

Dim con As New SqlConnection(strCmd)

con.Open()

Try
For Each ListView As ListViewItem In listHistoricoVendas.Items

If (ListView.Checked) Then

Dim strsql As String = [Ô][Ô]
Dim formaPago As String = [Ô]À Prazo - Pago[Ô]
Dim dataVcto As Date = (listHistoricoVendas.Items(0).SubItems(3).Text)
Dim strReceber As String = [Ô]SELECT DataVenda FROM TB_FinalizaVenda WHERE DataVenda =[Ô] & dataVcto

cmd = New SqlCommand(strReceber, con)
strReceber = CDate(cmd.ExecuteScalar())
strsql = [Ô]UPDATE TB_FinalizaVenda SET FormaPagamento = [ô][Ô] & formaPago & [Ô][ô] WHERE DataVenda =[Ô] & dataVcto
cmd = New SqlCommand(strsql, con)
cmd.ExecuteNonQuery()

End If
Next

Catch ex As Exception
MsgBox(ex.Message)
Finally
con.Close()
cmd = Nothing
End Try

End Sub

E dá o seguinte erro: conflito no tipo de operando int é incompatível com data com data

Como resolvo isso.
NILSONTRES 07/04/2014 14:06:22
#436978
Aparentemente, isso aqui >> (listHistoricoVendas.Items(0).SubItems(3).Text),
não esta sendo interpretado como data.
OCELOT 07/04/2014 14:23:11
#436979
Você não está delimitando a data na SQL, então ela vira números em que é feito uma conta de divisão, já que o separador de data é o mesmo que o operador de divisão.

O ideal seria usar parâmetros na SQL, mas colocando delimitadores na data, que no caso do SQL Server pode ser aspas simples também funciona
FILMAN 07/04/2014 21:57:42
#436994
Resposta escolhida
Bom se essa linha:
Dim dataVcto As Date = (listHistoricoVendas.Items(0).SubItems(3).Text)

Estiver com um retorno de data correto

você terá que fazer assim:
Dim strReceber As String = [Ô]SELECT DataVenda FROM TB_FinalizaVenda WHERE DataVenda =[Ô] & dataVcto.ToString([Ô]yyyy-MM-dd[Ô])
ou
Dim strReceber As String = [Ô]SELECT DataVenda FROM TB_FinalizaVenda WHERE DataVenda =[Ô] & Format(dataVcto, [Ô]yyyy-MM-dd[Ô])

E o mesmo para o UpDate.

Minha opinião trabalhe com parâmetros!
JCM0867 07/04/2014 22:06:20
#436996
experimente dataVcto.ToString

[Ô]A vida não dá e nem empresta, não se comove e nem se apieda. Tudo quanto ela faz é retribuir e transferir aquilo que nós lhe oferecemos.
Albert Einstein




SANROMAN 08/04/2014 13:38:33
#437029
Olá amigos

Com as alterações indicadas continua dando o mesmo erro. Ai resolvi trabalhar com o código da venda , ficou mais fácil e lógico.

Segue o código:

Private Sub alterarFormaPgto()

Dim con As New SqlConnection(strCmd)

con.Open()

Try
For Each ListView As ListViewItem In listHistoricoVendas.Items

If (ListView.Checked) Then

For i As Integer = 0 To listHistoricoVendas.Items.Count - 1

Dim strsql As String = [Ô][Ô]
Dim formaPago As String = [Ô]Pago[Ô]
Dim codVenda As Integer = listHistoricoVendas.Items(0).Text
Dim strReceber As String = [Ô]SELECT id_FinalizaVenda FROM TB_FinalizaVenda WHERE id_FinalizaVenda =[Ô] & codVenda

cmd = New SqlCommand(strReceber, con)
strReceber = CInt(cmd.ExecuteScalar())
strsql = [Ô]UPDATE TB_FinalizaVenda SET FormaPagamento = [ô][Ô] & formaPago & [Ô][ô] WHERE id_FinalizaVenda =[Ô] & codVenda
cmd = New SqlCommand(strsql, con)
cmd.ExecuteNonQuery()

Next

End If

Next

Catch ex As Exception
MsgBox(ex.Message)
Finally
con.Close()
cmd = Nothing
End Try

End Sub


Vou ter que me aprofundar mais para trabalhar corretamente com datas.

O código acima funciona bem, mas só faz update no no primeiro item do listview. Gostaria que fizesse o update em todos os items marcados.

Não sei se devo abrir outro tópico ou continuar nesse: Me deem um toque.
FILMAN 08/04/2014 23:46:56
#437047
Como esta carregado o seu ListView? Mostre-nos uma imagem do mesmo carregado!
SANROMAN 09/04/2014 10:27:36
#437059
Olá FILMAN

Segue imagem:

FILMAN 09/04/2014 12:33:13
#437081
    Private Sub alterarFormaPgto()

Dim con As New SqlConnection(strCmd)

con.Open()

Try
For Each ListView As ListViewItem In listHistoricoVendas.Items

If (ListView.Checked) Then

Dim codVenda As Integer = ListView.Text
Dim strsql As String = [Ô]SELECT id_FinalizaVenda FROM TB_FinalizaVenda WHERE id_FinalizaVenda =[Ô] & codVenda

cmd = New SqlCommand(strsql, con)
codVenda = CInt(cmd.ExecuteScalar())

strsql = [Ô]UPDATE TB_FinalizaVenda SET FormaPagamento = [ô]Pago[ô] WHERE id_FinalizaVenda =[Ô] & codVenda
cmd = New SqlCommand(strsql, con)
cmd.ExecuteNonQuery()

End If

Next

Catch ex As Exception
MsgBox(ex.Message)

Finally
con.Close()
cmd = Nothing

End Try

End Sub



Caso queira pegar alguma outra coluna faça assim:

Dim Nome As String = ListView.SubItems(1).Text


espero ter ajudado
SANROMAN 09/04/2014 13:31:19
#437089
Perfeito. Muito obrigado pela ajuda.

Um abraço
Tópico encerrado , respostas não são mais permitidas