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

Luis Marques

Problema no update

Recommended Posts

Luis Marques

Boas, tou com um problema no update que é o seguinte.

Tenho vários itens por exemplo o item 1, item 2, item 3, e ao actulizar apenas vai gravar o item 2 , item 3...

Ou seja o item com o valor mais baixo nunca grava.

Deixo aqui o codigo que tenho para fazer o update

   

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        'alterar na tabela encomendas

        Dim intEncomenda As Integer = ToNumber(Id_encomendaTextBox.Text)

        Dim intCliente As Integer = ToNumber(Id_clienteTextBox.Text)

        Dim dtData As String = ToDbdate(DataDateTimePicker.Value)

        Dim intdescricao As String = ToStringA(TextBox2.Text)

        Dim strResp As String = ToStringA(Responsavel_pdTextBox.Text)

        Dim dblTotal As Object = ToNumber(TotalTextBox.Text)

        Dim strSql As String = "UPDATE encomenda SET id_cliente=" & intCliente & ",data=" & dtData & ",descricao=" & intdescricao & ",responsavel_pd=" & strResp & ",total=" & dblTotal & " where [id_encomenda]=" & intEncomenda & ""

        OleDBExecute(strSql)

        'alterar na tabela item encomendas

        For i = 0 To DataGridView1.Rows.Count - 2 ' para correr todas as linhas

            Dim intEncomendas As Integer = ToNumber(nz(Id_encomendaTextBox.Text, 0))

            Dim intid_item As Integer = ToNumber(nz(DataGridView1.Rows(i).Cells(0).Value, 0))

            Dim intidproduto As Integer = ToNumber(nz(DataGridView1.Rows(i).Cells(1).Value, 0))

            Dim intquantidade As Integer = ToNumber(nz(DataGridView1.Rows(i).Cells(2).Value, 0))

            Dim intpreco As Object = ToNumber(nz(DataGridView1.Rows(i).Cells(3).Value, 0))

            Dim intid_imagem As Integer = ToNumber(nz(DataGridView1.Rows(i).Cells(4).Value, 0))

            strSql = "UPDATE itemencomenda SET id_encomenda=" & intEncomendas & ",id_item=" & intid_item & ",id_produto=" & intidproduto & ",quantidade=" & intquantidade & ",preco=" & intpreco & " ,id_imagem=" & intid_imagem & " where [id_encomenda]=" & intEncomenda & ""

            OleDBExecute(strSql)

        Next

    End Sub

Public Function OleDBExecute(ByVal strSql As String) As Integer

        Using connection As New OleDbConnection(pap.My.Settings.ligacaoBD)

            Dim cmd As New OleDbCommand(strSql, connection)

            cmd.CommandType = CommandType.Text

            connection.Open()

            Try

                Dim i As Integer = cmd.ExecuteNonQuery()

                Return i

            Catch ex As OleDb.OleDbException

                MsgBox(ex.Message)

            End Try

        End Using

    End Function


LM

Share this post


Link to post
Share on other sites
ricardoantunes

porque é que estas a fazer: For i = 0 To DataGridView1.Rows.Count - 2

não pode ser: For i = 0 To DataGridView1.Rows.Count - 1 ?

Share this post


Link to post
Share on other sites
esquima

tenta assim

For Each row As DataGridViewRow In Me.DataGridView1.Rows

              Dim intEncomendas As Integer = ToNumber(nz(Id_encomendaTextBox.Text, 0))

            Dim intid_item As Integer = ToNumber(nz( row.Cells(0).Value , 0))

            Dim intidproduto As Integer = ToNumber(nz( row.Cells(1).Value , 0))

            Dim intquantidade As Integer = ToNumber(nz( row.Cells(2).Value , 0))

            Dim intpreco As Object = ToNumber(nz( row.Cells(3).Value , 0))

            Dim intid_imagem As Integer = ToNumber(nz( row.Cells(4).Value , 0))

            strSql = "UPDATE itemencomenda SET id_encomenda=" & intEncomendas & ",id_item=" & intid_item & ",id_produto=" & intidproduto & ",quantidade=" & intquantidade & ",preco=" & intpreco & " ,id_imagem=" & intid_imagem & " where [id_encomenda]=" & intEncomenda & ""

            OleDBExecute(strSql)

            Next

Share this post


Link to post
Share on other sites
Luis Marques

Sim grava, o valor mais baixo do item é que nao grava.

Ou seja só grava o item  7,8 em vez de gravar o item 6,7,8.


LM

Share this post


Link to post
Share on other sites
esquima

ja viste em debug qtas vezes e que ele faz o for e os resultados das variaveis k vai para o update

Share this post


Link to post
Share on other sites
Luis Marques

Fiz agora o debug e faz o for 3 vezes, ou seja para os 3 itens k tenho.

Não percebo porque está a dar mal, já que passa todos os itens.


LM

Share this post


Link to post
Share on other sites
esquima

o intEncomenda vai sempre com valor das 3vezes..confirma

ja agora  connection.close() depois do return i

Share this post


Link to post
Share on other sites
Luis Marques

esquecime de dizer que com este codigo que deste nao passa os valores todos dos items, com aquele que eu tinha é que passam os valores todos


LM

Share this post


Link to post
Share on other sites
esquima

For i = 0 To DataGridView1.Rows.Count - 2--com isto o teu for corre 3x,eu axo k nao

Share this post


Link to post
Share on other sites
Luis Marques

upss... tenho de corrigir o que disse, ja estava a fazer confusao.

O TEU CODIGO É QUE ESTÁ A PASSAR TODOS OS ITEMS, o meu é que nao!xD


LM

Share this post


Link to post
Share on other sites
Luis Marques

Isso corre os items todos, so que depois o item  mais baixo não passar, ou seja logo o primeiro item


LM

Share this post


Link to post
Share on other sites
esquima

Dim i As Integer = cmd.ExecuteNonQuery()

                Return i

ve o que devolve este i das 3vezes que vai la

Share this post


Link to post
Share on other sites
jpaulino

Ontem já te mostrei como fazer um ciclo numa datagridview. Qual é o problema?

            For Each row As DataGridViewRow In Me.DataGridView1.Rows
                If Not row.IsNewRow Then
                       Debug.WriteLine(row.Cells(0).Value)
                End If
            Next

Share this post


Link to post
Share on other sites
José Lopes

o problema é mesmo uma estrutura de dados... que está mal feita... por melhor que esteja o código...


Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

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

×

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.