Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Chamuanza

Erro ao actualizar BD

Mensagens Recomendadas

Chamuanza

Oi pessoal estou baralhado e preciso de uma ajuda

Tenho uma tabela segundo esta imagem

datagrid.gif

Quando necessito alterar um dos registos intermedios utilizo este código:

 Private Sub DepositoTextBox_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles DepositoTextBox.Leave

        Dim NumerodeLinhaAlterar As Integer = Me.DadosActuaisDataGridView.CurrentRow.Index()

        Dim NumeroLinha As Integer = Me.DadosActuaisDataGridView.Rows.Count - 2

        If NumerodeLinhaAlterar < NumeroLinha Then

            Call AlterarRegisto()
            Call SomarColuna()
            Exit Sub
        End If

        Dim UltimoBalanco As Decimal
      
        End If
         

    End Sub  

 Private Sub AlterarRegisto()

        Dim NumerodeLinhaAlterar As Integer = Me.DadosActuaisDataGridView.CurrentRow.Index()
        'Dim ValorBalancoAnterior As Decimal = Me.Table1DataGridView.Item(5, NumerodeLinhaAlterar - 1).Value

        'Dim ValorAlteradoDespesa As Decimal = Me.Table1DataGridView.Item(3, NumerodeLinhaAlterar).Value
        Dim ValorAlteradoDespesa As Decimal = Me.DespesaTextBox.Text
        Dim DiferencaDespesa As Decimal = Me.TextBox2.Text - Me.DespesaTextBox.Text

        Dim ValorAlteradoDeposito As Decimal = Me.DepositoTextBox.Text
        Dim DiferencaDeposito As Decimal = Me.TextBox3.Text - Me.DepositoTextBox.Text

        Dim NumerodeLinhas As Integer = Me.DadosActuaisDataGridView.Rows.Count - 2

        'Se não há alteração do valor de depesa ou receita sai fora


        If DiferencaDespesa = 0 And DiferencaDeposito = 0 Then
            ' MsgBox("Grave as alterações")
            'ToolStripButton1.Enabled = False
            Exit Sub
        End If


        'Faz o acerto do balanço quando se altera um valor de despesa ou receita
        For Acertos = NumerodeLinhaAlterar To NumerodeLinhas

            Me.DadosActuaisDataGridView.Item(5, Acertos).Value = Me.DadosActuaisDataGridView.Item(5, Acertos).Value + DiferencaDespesa

            Me.DadosActuaisDataGridView.Item(5, Acertos).Value = Me.DadosActuaisDataGridView.Item(5, Acertos).Value - DiferencaDeposito

                   Next

        BalancoTextBox.Text = Me.DadosActuaisDataGridView.Item(5, NumerodeLinhas).Value
      

        'Faz a verificaçãode valores
        Label3.Text = Microsoft.VisualBasic.Format(Decimal.Parse(Label2.Text - Label1.Text), "##,##0.00 €")
     
        Call SomarColuna()

    End Sub

A rotina "AlterarRegisto" funciona bem, pois vai alterar os registos na tabela para os valores correctos face a alteração pretendida, mas quando gravo as alterações com

 Private Sub ActualizarDados_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ActualizarDados.Click


        Dim ConnectionString As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Despesas2012\DespesasFamiliares2012.mdb;")


        Dim query As String = "UPDATE DadosActuais SET [Data] = @Data,[Designacao] = @Designacao, [Despesa] = @Despesa, [Deposito] = @Deposito, [balanco] = @Balanco,  [Categoria] = @Categoria, [subCategoria] = @SubCategoria,[Familiar] = @Familiar WHERE [id] = @Id"


        Dim command As New OleDbCommand(query, ConnectionString)


        ' Indicação dos parâmetros que serão actualizados 
        command.Parameters.Add("@data", OleDbType.Char).Value = DataTextBox.Text
        command.Parameters.Add("@Designacao", OleDbType.Char).Value = DesignacaoTextBox.Text
        command.Parameters.Add("@Despesa", OleDbType.Char).Value = DespesaTextBox.Text
        command.Parameters.Add("@Deposito", OleDbType.Char).Value = DepositoTextBox.Text
        command.Parameters.Add("@Balanco", OleDbType.Char).Value = BalancoTextBox.Text
        command.Parameters.Add("@Categoria", OleDbType.Char).Value = CategoriaTextBox.Text
        command.Parameters.Add("@SubCategoria", OleDbType.Char).Value = SubCategoriaTextBox.Text
        command.Parameters.Add("@Familiar", OleDbType.Char).Value = FamiliarTextBox.Text
        command.Parameters.Add("@id", OleDbType.Char).Value = TextBox1.Text


        ConnectionString.Open()

        Dim x As Integer = command.ExecuteNonQuery()

        If x < 1 Then
            MessageBox.Show("Erro ao actualizar", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Else
            MessageBox.Show("Actualizado com sucesso!", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If

        ConnectionString.Close()
        command = Nothing

        Call CarregarTabela()

        Call SomarColuna()


    End Sub

a celula da coluna Balanco é alterada e fica com erro em relação a soma, ou seja faço as alterações e tudo bem quando gravo e volto a Form está errada a soma com o valor da alteração (despesa ou deposito)a mais na ultima celuca

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Antes de mais, isso está mal.

Char? Então os teus campos são todos do tipo Char?

De resto, acho que não percebi. Os dados não são alterados ou os valores ficam com problemas? Se assim for provavelmente será da forma como os estás a carregar..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Chamuanza

oi bioshock

ja alterei o valor dos campos (peço desculpa pelo erro grosseiro), voltei a testar e os dados são alterados mas quando gravo os valores são alterados

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

(...) voltei a testar e os dados são alterados mas quando gravo os valores são alterados

Tens de te explicar melhor, tu tens o problema na tua cabeça, eu não o consigo ver.

Quando fazes UPDATE dos dados, eles são alterados mas não são alterados como queres? Dá algum erro ou simplesmente os valores não ficam conforme a actualização?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Chamuanza

sim os valores não ficam conforme a actualização

Exemplo: Vou alterar o antepenultimo registo, quando altero ficam os valores correctos na Datagrid, quando gravo os valores do penultimo e ultimo registo ficam alterados

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.