marioverdini 0 Posted May 2, 2019 Report Share Posted May 2, 2019 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 Link to post Share on other sites
nelsonr 331 Posted May 6, 2019 Report Share Posted May 6, 2019 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. Link to post Share on other sites
marioverdini 0 Posted May 6, 2019 Author Report Share Posted May 6, 2019 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 Link to post Share on other sites
nelsonr 331 Posted May 9, 2019 Report Share Posted May 9, 2019 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) Link to post Share on other sites
marioverdini 0 Posted May 9, 2019 Author Report Share Posted May 9, 2019 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 ? Link to post Share on other sites
nelsonr 331 Posted May 9, 2019 Report Share Posted May 9, 2019 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)) Link to post Share on other sites
nelsonr 331 Posted May 9, 2019 Report Share Posted May 9, 2019 (edited) 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 May 9, 2019 by nelsonr Link to post Share on other sites
marioverdini 0 Posted May 9, 2019 Author Report Share Posted May 9, 2019 ja te dou uma resposta Link to post Share on other sites
marioverdini 0 Posted May 9, 2019 Author Report Share Posted May 9, 2019 eu sou novo no assunto queres que te envie o codigo fonte? Link to post Share on other sites
nelsonr 331 Posted May 9, 2019 Report Share Posted May 9, 2019 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? Link to post Share on other sites
marioverdini 0 Posted May 9, 2019 Author Report Share Posted May 9, 2019 ja estou a ficar confuso nesse momento estou a usar o sql mas sendo assim me mande para acces tambem Link to post Share on other sites
marioverdini 0 Posted May 9, 2019 Author Report Share Posted May 9, 2019 meu amigo nao funcionou com o codigo que vc me mandou o jeito e te mandar o codigo fonte Link to post Share on other sites
nelsonr 331 Posted May 9, 2019 Report Share Posted May 9, 2019 (edited) 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 May 9, 2019 by nelsonr Link to post Share on other sites
marioverdini 0 Posted May 9, 2019 Author Report Share Posted May 9, 2019 nesse mesmo sistema eu posso usar access e posso usar Sql server qual seria o mais facil pra voçe? Link to post Share on other sites
nelsonr 331 Posted May 9, 2019 Report Share Posted May 9, 2019 É 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? Link to post Share on other sites
marioverdini 0 Posted May 9, 2019 Author Report Share Posted May 9, 2019 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 Link to post Share on other sites
nelsonr 331 Posted May 9, 2019 Report Share Posted May 9, 2019 (edited) 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 May 9, 2019 by nelsonr Link to post Share on other sites
marioverdini 0 Posted May 9, 2019 Author Report Share Posted May 9, 2019 Eu nao vi nada de programação no banco mas por eu ser inesperiente posso nao ter visto Link to post Share on other sites
nelsonr 331 Posted May 9, 2019 Report Share Posted May 9, 2019 Não me estou a conseguir fazer entender 😐 Como é que criaste a base de dados que estás a usar? Link to post Share on other sites
marioverdini 0 Posted May 9, 2019 Author Report Share Posted May 9, 2019 Meu amigo eu nao criei nada eu baixei esse codigo fonte da net e estou a adaptalo a minha maneira Link to post Share on other sites
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now