• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

CyberBird

Fazer Update De Numeros Decimais do vb .net pra SQL DataBase

7 mensagens neste tópico

Tou com um grande problema a fazer updates/inserir valores decimais na base dados apartir do vb.net.

Cada vez que tentava faze-lo davame erro - "Error Converting data type varchar to numeric" , mas depois utilizei a função Convert e tudo parecia darcerto, mas não.

Do tipo imaginemos k um user insere um numero - 16,8 e quando vou ver na base de dados SQL o número é 16,00 e não 16,8 .

sql = "Update Artigos Set ArtigoDescricao='" & Tmp1(0)("ArtigoDescricao") & "' , ArtigoPreco=CONVERT(numeric(18, 2)," & Tmp1(0)("ArtigoPreco") & ")  Where ArtigoCOD='" & Tmp1(0)("ArtigoCOD") & "'"

            CMD = New Odbc.OdbcCommand(sql, Pat.IniDataSet.CN)

            DA.UpdateCommand = CMD

            DA.Update(Pat.IniDataSet.DS.Tables("Artigos"))

Alguma ideia do k possa ser?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sem  usares ms sql 2000(2005) usa a namespace System.Data.SQLClients em vez de odbc.

Se passares o preço no formato XXXXXXXXXXXXX.YY funciona de certeza

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tou usar Odbc porque na empresa em que estou a "estagiar" eles usam o ms sql 2000.

Onde é que é suposto eu definir o formato do preco, na função convert? Se sim agredecia que dessem um exemplo da syntax.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

odbc é super lento e só deves usar com access!!

porque que não crias stored procedures fazer o update e chamas a partir do vb?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qual é a vantagem de ter Stored Procedures?

Pelo que percebi quando li os livros, não vi grandes vantagens em usar stored procedures pra fazer update. Posso tar redondamente enganado o que significa k nao percebi quase nada ou mesmo nada de stored procedures.

Portanto por agr tenho usado algo similar a  isto pra fazer updates :

DataRow Tmp() as DataRow = 'Nome Data'.Select("Qualquer Coisa")

// Coloco os novos valores nessa DataRow Ex:

Tmp(0)("ArtigoDescricao") = Trim(txtDescrição.text)

// E depois faço o update, sem CommandBuilder

SQL = String.Format("Update Artigos Set ArtigoDescicao = '{0}' Where ArtigoCOD = '{1}'",Tmp(0)("ArtigoDEscricao"),Tmp(0)("ArtigoCOD"))

CMD = New Odbc.OdbcCommand(sql, Pat.IniDataSet.CN)

            DA.UpdateCommand = CMD

            DA.Update(Pat.IniDataSet.DS.Tables("Artigos"))

// O DataRow "Movesse" Dependendo da seleção da datagridview

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ha imensas vantagens em usar stored procedures para tudo e mais alguma coisa.

A minha empresa tem uma bd com 318 tabelas e 936 stored procedures. e fazemos gestão de todas as áreas da minha empresa: armazém,aprovisionamentos,industrial,contabilidade,gestão da qualidade e comercial.

Qualquer que fazes alterações em tabelas, alteras os respectivos stored e modifica o código no vb.

Tens que mudar a connectionstring

SQL = String.Format("Update Artigos Set ArtigoDescicao = '{0}' Where ArtigoCOD = '{1}'",Tmp(0)("ArtigoDEscricao"),Tmp(0)("ArtigoCOD"))

Já viste a complexidade de concatenar texto se tiver muitas colunas ...

create procedure actualiza_preco_artigos

-- versão 1 - dia 28-02-2005
-- Actualiza preco da tabela artigos

@cod varchar(50),
@preco decimal(18,2)
AS

update artigos set artigopreco = @preco where artigocod =@cod
return 1 -- ok

Grant all on actualiza_preco_artigos to NomeDoUtlizador

Option Explicit On
Option Strict On

Imports System.Data.SqlClient

public class Artigos
public Sub ActualizaPrecoArtigos(byval codigo as string, byval preco as decimal)

        Dim con As New SqlConnection
        Dim com As New SqlCommand

        con.ConnectionString = "data source=10.1.1.13;initial catalog=Dinefer;persist security info=False;user id=Utilizador;password=ab,cdef123!;workstation id=" & System.Environment.MachineName & ";packet size=32767;"
        con.Open()
        com.Connection = con
        com.CommandType = CommandType.StoredProcedure
        com.CommandText = "actualiza_preco_artigos"
        com.Parameters.Clear()
        com.Parameters.Add("@cod", SqlDbType.VarChar).Value = codigo
        com.Parameters.Add("@compra", SqlDbType.Decimal).Value = preco


        Try
            com.ExecuteNonQuery()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

        con.Close()
end sub
end class

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm percebi, isso torna as coisas mais simples. O exemplo ta muito bom, obrigado pelo o trabalho que tiveste a faze-lo.

Obrigado por tudo!!

Já agr......

Imaginemos que tenho uma DataGridView e quero listar os seus conteudos em textboxes, eis a maneira como eu faço :

Private Sub DGV1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV1.CellClick
        Value1 = DGV1.CurrentCell.Value.ToString
        ShowInfo()

End Sub

Sub Showinfo()
If Not Pat.IniDataSet.DS.Tables("Artigos").Rows.Count = 0 Then

                For i As Integer = 0 To Pat.IniDataSet.DS.Tables("Artigos").Rows.Count - 1

                    If Pat.IniDataSet.DS.Tables("Artigos").Rows(i).Item("ArtigoCOD") = Value1 Then

                        Gadd = False
                        VExiste = False
                        Tmp1 = Pat.IniDataSet.DS.Tables("Artigos").Select(String.Format("ArtigoCOD='{0}'", Value1))
                        txtCOD.Text = Tmp1(0)("ArtigoCod")
                        txtDes.Text = Tmp1(0)("ArtigoDescricao")
                        txtPrec.Text = Tmp1(0)("ArtigoPreco")
                        Exit For

                    Else
                        If Pat.IniDataSet.DS.Tables("Artigos").Rows(i).Item("ArtigoDescricao") = Value1 Then
                            Gadd = False
                            VExiste = False
                            Tmp1 = Pat.IniDataSet.DS.Tables("Artigos").Select(String.Format("ArtigoCOD='{0}'", Pat.IniDataSet.DS.Tables("Artigos").Rows(i).Item("ArtigoCOD")))
                            txtCOD.Text = Pat.IniDataSet.DS.Tables("Artigos").Rows(i).Item("ArtigoCOD")
                            txtDes.Text = Pat.IniDataSet.DS.Tables("Artigos").Rows(i).Item("ArtigoDescricao")
                            txtPrec.Text = Pat.IniDataSet.DS.Tables("Artigos").Rows(i).Item("ArtigoPreco")
                            Exit For
                        End If

                    End If

                Next
            End If
End Sub

Penso que esta nao é maneira mais correcta de o fazer. No entanto funciona.

Há outra maneira mais simples? 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora