Jump to content
marioverdini

vb.net + sql

Recommended Posts

marioverdini

Boa tarde a todos
Baixei um codigo fonte da internet e como sou iniciante estou estudando o codigo para afins de aprendizado entao vamos la, no cadastro de produto tem uma textbox que recebe um valor preço
pelo que percebi a declaçao da variavel pelo q parece esta misturada com conecçao com o banco sql isso acontece no codigo do botao save ou update 
Queria saber nessa situação como faço para no campo preço ter casas decimais no entanto eu digito o preço de 1.01 e primo em salvar ou em atualizao ele aceita mas quando vou pesquisar o produto no form de pesquisa preço fica 101
No banco sql estava com o tipo de dados float eu alterei para decimal tanto no codigo como no sql nao deu certo
alguem pode me ajudar?
vou colocar o codigo do botao update
 

Private Sub Update_Record_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Update_Record.Click
Try
            con = New SqlConnection(cs)
            con.Open()
                   Dim cb As String = "update product set Productname=@d2,category=@d3,Weight=@d4,price=@d5 where Productcode=@d1"
                          cmd = New SqlCommand(cb)
                          cmd.Connection = con
            cmd.Parameters.Add(New SqlParameter("@d1", System.Data.SqlDbType.NChar, 20, "productcode"))
            cmd.Parameters.Add(New SqlParameter("@d2", System.Data.SqlDbType.VarChar, 250, "productname"))
            cmd.Parameters.Add(New SqlParameter("@d3", System.Data.SqlDbType.VarChar, 150, "category"))
            cmd.Parameters.Add(New SqlParameter("@d4", System.Data.SqlDbType.NChar, 10, "weight"))
            cmd.Parameters.Add(New SqlParameter("@d5", System.Data.SqlDbType.Float, 10, "price"))
            cmd.Parameters("@d1").Value = txtProductCode.Text
            cmd.Parameters("@d2").Value = txtProductName.Text
            cmd.Parameters("@d3").Value = cmbCategory.Text
            cmd.Parameters("@d4").Value = cmbWeight.Text
            cmd.Parameters("@d5").Value = CDbl(txtPrice.Text)

            cmd.ExecuteReader()
            MessageBox.Show("Successfully updated", "Product Details", MessageBoxButtons.OK, MessageBoxIcon.Information)

            Update_Record.Enabled = False
            fillCategory()
            fillWeight()

            autocomplete()
            If con.State = ConnectionState.Open Then

                con.Close()

            End If
                con.Close()
                   Catch ex As Exception

            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

 

Share this post


Link to post
Share on other sites
nelsonr

Boa tarde marioverdini,

isso parece estar relacionado com a cultura usada na aplicação, em que deve estar a usar a virgula como caracter decimal.

Experimenta 10,1 em vez de 10.1.

Provavelmente seria melhor usares o Double.Parse em vez do CDbl, em que podes indicar qual a cultura.

Share this post


Link to post
Share on other sites
marioverdini

ele nao me deixa colocar a virgula 
nesse texbox ja tentei alterar para virgula e nada continua apenas a deuxar ey digitar o ponto e mesmo assim quando digito o ponto quando vou ver se gravou com ponto ele me da como inteiro

Private Sub txtPrice_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtPrice.KeyPress
        Dim keyChar = e.KeyChar

        If Char.IsControl(keyChar) Then
            'Allow all control characters.
        ElseIf Char.IsDigit(keyChar) OrElse keyChar = "."c Then
            Dim text = Me.txtPrice.Text
            Dim selectionStart = Me.txtPrice.SelectionStart
            Dim selectionLength = Me.txtPrice.SelectionLength

            text = text.Substring(0, selectionStart) & keyChar & text.Substring(selectionStart + selectionLength)

            If Integer.TryParse(text, New Integer) AndAlso text.Length > 16 Then
                'Reject an integer that is longer than 16 digits.
                e.Handled = True
            ElseIf Double.TryParse(text, New Double) AndAlso text.IndexOf("."c) < text.Length - 5 Then
                'Reject a real number with two many decimal places.
                e.Handled = False
            End If
        Else
            'Reject all other characters.
            e.Handled = True
        End If
    End Sub

Share this post


Link to post
Share on other sites
nelsonr

Então podes tentar subsituir o ponto por virgula antes de enviares para a base de dados.
Mas isto seria apenas para confirmar que o problema está na cultura.

Se funcionar e queres deixar essa parte a aceitar apenas pontos como separador, podes antes de gravar na base de dados fazer a substituição do ponto pelo caracter definido na cultura como caracter separador dos valores decimais.

Exemplo:

Dim texto As String = "1.50"
texto = texto.Replace(".", Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator)
Dim valor As Double = Convert.ToDouble(texto)
Console.WriteLine(valor)

 

Share this post


Link to post
Share on other sites
marioverdini

em que parte do codigo eu coloco?
se eu fizer isso Dim texto As String = "1.50" eu nao estou declarando que a variavel tento so pode receber o valor 1.50 ?

Share this post


Link to post
Share on other sites
nelsonr

Era apenas um exemplo de converter um texto em numero decimal, tendo o ponto como separador.
No teu codigo experimenta substituir esta linha:

cmd.Parameters("@d5").Value = CDbl(txtPrice.Text)

por

cmd.Parameters("@d5").Value = Convert.ToDouble(txtPrice.Text.Replace(".", Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator))

 

Share this post


Link to post
Share on other sites
nelsonr

Já agora, experimentaste ir diretamente à base de dados e por lá um número decimal?

(usando por exemplo o management studio)

Reparei que tens a parte das casas decimais como auto, testaste colocar lá um número, por exemplo 2?

Edited by nelsonr

Share this post


Link to post
Share on other sites
marioverdini

eu sou novo no assunto queres que te envie o codigo fonte?

Share this post


Link to post
Share on other sites
nelsonr

Estás a usar Access, correto?

Se abrires a BD com o Access, consegues colocar nesse campo valores com casas decimais? (só para confirmar que não é da definição dos campos).

Caso consigas, já experimentaste o exemplo que dei?

Share this post


Link to post
Share on other sites
marioverdini

ja estou a ficar confuso 
nesse momento estou a usar o sql 
 

 

mas sendo assim me mande para acces tambem 

 

Share this post


Link to post
Share on other sites
marioverdini

meu amigo nao funcionou com o codigo que vc me mandou o jeito e te mandar o codigo fonte 

Share this post


Link to post
Share on other sites
nelsonr

SQL é uma linguagem, não indica o tipo de base de dados.
Pode ser por exemplo MySQL, MSSqlServer, Access, etc.

No outro post indicaste que usaste o Access, qual é exactamente que estás a usar?

Criaste a base de dados com que aplicação?
Consegues usar essa aplicação para testar a base de dados, introduzindo diretamente registos nas tabelas?

Edited by nelsonr

Share this post


Link to post
Share on other sites
marioverdini

nesse mesmo sistema eu posso usar access e posso usar Sql server 
qual seria o mais facil pra voçe?

Share this post


Link to post
Share on other sites
nelsonr

É igual, convém é saber qual estás a usar e se criaste corretamente o campo.

Como criaste a base de dados?
Consegues usar essa aplicação para testar a base de dados, introduzindo diretamente registos nas tabelas?

Consegues confirmar que usando essa aplicação (estou a assumir que usaste uma aplicação para criar) e aceder à tabela, consegues adicionar um registo e colocar o preço com um valor com casas decimais?

Share this post


Link to post
Share on other sites
marioverdini

esse codigo eu baixei na net e estou a estudar mas para dar um resultado final em condiçoes as operaçoes matematicas tem que ser corretas 

Share this post


Link to post
Share on other sites
nelsonr

As minhas questões não eram sobre o código, mas sim sobre a criação da base de dados.
Ou foi criada por código também?

Edited by nelsonr

Share this post


Link to post
Share on other sites
marioverdini

Eu nao vi nada de programação no banco mas por eu ser inesperiente posso nao ter visto 

Share this post


Link to post
Share on other sites
nelsonr

Não me estou a conseguir fazer entender 😐

Como é que criaste a base de dados que estás a usar?

Share this post


Link to post
Share on other sites
marioverdini

Meu amigo eu nao criei nada eu baixei esse codigo fonte da net e estou a adaptalo a minha maneira 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.