none
Erro ao atualizar dados RRS feed

  • Pergunta

  • Olá

    estou fazendo alterações em dados de minha tabela mdb

    porem apesar de executar todos os processos,

    ele não esta gravando no banco

     

     

    há algo errado no codigo?

     

     Public con As New System.Data.OleDb.OleDbConnection("Provider = Microsoft.jet.OleDB.4.0;Data Source = cadastro.mdb;")
     
    
    
     Private Sub ButtonSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonSalvar.Click
        
    
        If ButtonSalvar.Text = "Editar chapa" Then
          HabilitarCampos()
          TextBoxCodigo.Enabled = False
          ButtonSalvar.Text = "Salvar alterações"
    
        ElseIf ButtonSalvar.Text = "Salvar alterações" Then
          SalvarChapa()
          DesabilitarCampos()
          ButtonSalvar.Text = "Editar chapa"
        End If
    
    
     Public Sub SalvarChapa()
      
        Try
          Dim Command As OleDbCommand = New OleDbCommand("update Chapas set Codigo=@Codigo, CodigoEx=@CodigoEx, Descricao=@Descricao, Preco=@Preco, Peso=@Peso, Rotacionar=@Rotacionar, Base=@Base, BaseMinima=@BaseMinima, BaseMaxima=@BaseMaxima, Altura=@Altura, AlturaMinima=@AlturaMinima, AlturaMaxima=@AlturaMaxima, Espessura=@Espessura, EspessuraSerra=@EspessuraSerra, Textura=@Textura where Codigo=@CodigoSelecionado", con)
    
    
          Command.Parameters.AddWithValue("@CodigoSelecionado", LabelCodigoSelecionado.Text)
    
          Command.Parameters.AddWithValue("@Codigo", TextBoxCodigo.Text)
          Command.Parameters.AddWithValue("@CodigoEx", TextBoxCodigoEx.Text)
          Command.Parameters.AddWithValue("@Descricao", TextBoxDescricao.Text)
          Command.Parameters.AddWithValue("@Preco", TextBoxPreco.Text)
          Command.Parameters.AddWithValue("@Peso", TextBoxPeso.Text)
          Command.Parameters.AddWithValue("@Base", TextBoxBase.Text)
          Command.Parameters.AddWithValue("@BaseMinima", TextBoxBaseMin.Text)
          Command.Parameters.AddWithValue("@BaseMaxima", TextBoxBaseMax.Text)
          Command.Parameters.AddWithValue("@Altura", TextBoxAltura.Text)
          Command.Parameters.AddWithValue("@AlturaMinima", TextBoxAlturaMin.Text)
          Command.Parameters.AddWithValue("@AlturaMaxima", TextBoxAlturaMax.Text)
          Command.Parameters.AddWithValue("@Espessura", TextBoxEspessura.Text)
          Command.Parameters.AddWithValue("@EspessuraSerra", TextBoxEspessuraSerra.Text)
          Command.Parameters.AddWithValue("@Textura", TextBoxTextura.Text)
    
          If CheckBoxRotacionar.Checked = False Then
            Command.Parameters.AddWithValue("@Rotacionar", "0")
          Else
            Command.Parameters.AddWithValue("@Rotacionar", "1")
    
          End If
    
          con.Open()
          Command.ExecuteNonQuery()
          con.Close()
    
          MsgBox("Chapa editada com sucesso!")
          ComboChapas.Items.Clear()
          CarregaDados()
        Catch ex As Exception
          MsgBox(ex.Message)
        End Try
    
      End Sub
    


    Bruno Gaiola Domus & Lepton Des. Software
    segunda-feira, 14 de fevereiro de 2011 15:52

Respostas

  • @Bruno

    Existe problema de logica no teu codigo. Voce criou uma codicao if:

     

    f CheckBoxRotacionar.Checked = False Then
        Command.Parameters.AddWithValue("@Rotacionar", "0")
    queres gravar isto?
       Else
        Command.Parameters.AddWithValue("@Rotacionar", "1")
    queres gravar?
       End If
    
       con.Open()
       Command.ExecuteNonQuery()
       con.Close()
    
       MsgBox("Chapa editada com sucesso!")
       ComboChapas.Items.Clear()
       CarregaDados()
      Catch ex As Exception
       MsgBox(ex.Message)
      End Try
    

    Faz Asim:

     

    f CheckBoxRotacionar.Checked = False Then
        Command.Parameters.AddWithValue("@Rotacionar", "0")
      con.Open()
       Command.ExecuteNonQuery()
       con.Close()
    
      MsgBox("Chapa editada com sucesso!")
       ComboChapas.Items.Clear()
       CarregaDados()

    Else Command.Parameters.AddWithValue("@Rotacionar", "1")
      con.Open()
       Command.ExecuteNonQuery()
       con.Close()
    
      MsgBox("Chapa editada com sucesso!")
       ComboChapas.Items.Clear()
       CarregaDados()

    End If Catch ex As Exception MsgBox(ex.Message) End Try


    Just Be Humble Malange!
    • Marcado como Resposta Bruno Gaiola segunda-feira, 14 de fevereiro de 2011 17:15
    segunda-feira, 14 de fevereiro de 2011 16:27
  • Bruno percebi que vc está atualizando o "codigo" se esse codigo for chave primária ele não deve ser alterado ai vc terá que apagar esta parte em sua query: Codigo=@Codigo e eliminar esta:  "Command.Parameters.AddWithValue("@Codigo", TextBoxCodigo.Text) e testa ^veja se funciona.

    Abraços e lembre-se de verificar a ordem de preenchimentos dos parâmetros.

     


    Estudar, Estudar e Estudar! Não existe caminho curto.
    • Marcado como Resposta Bruno Gaiola segunda-feira, 14 de fevereiro de 2011 17:15
    segunda-feira, 14 de fevereiro de 2011 16:35
  • Bruno,

    Segundo a documentação (http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx) o OleDbCommand não suporta parâmetros nomeados... Para passar os parâmetros, você deve utilizar o sinal de interrogação e incluir os parâmetros na ordem correta:

    • The OLE DB .NET Provider does not support named parameters for passing parameters to an SQL statement or a stored procedure called by an OleDbCommand when CommandType is set to Text. In this case, the question mark (?) placeholder must be used. For example:
    • SELECT * FROM Customers WHERE CustomerID = ?
    • Therefore, the order in which OleDbParameter objects are added to the OleDbParameterCollection must directly correspond to the position of the question mark placeholder for the parameter in the command text.

    Portanto, tente alterar o seu código para exatamente o seguinte e veja se funciona:

    Dim Command As OleDbCommand = New OleDbCommand("update Chapas set Codigo=?, CodigoEx=?, Descricao=?, Preco=?, Peso=?, Rotacionar=?, Base=?, BaseMinima=?, BaseMaxima=?, Altura=?, AlturaMinima=?, AlturaMaxima=?, Espessura=?, EspessuraSerra=?, Textura=? where Codigo=?", con)
    
    Command.Parameters.AddWithValue("Codigo", TextBoxCodigo.Text)
    Command.Parameters.AddWithValue("CodigoEx", TextBoxCodigoEx.Text)
    Command.Parameters.AddWithValue("Descricao", TextBoxDescricao.Text)
    Command.Parameters.AddWithValue("Preco", TextBoxPreco.Text)
    Command.Parameters.AddWithValue("Peso", TextBoxPeso.Text)
    
    If CheckBoxRotacionar.Checked = False Then
     Command.Parameters.AddWithValue("Rotacionar", "0")
    Else
     Command.Parameters.AddWithValue("Rotacionar", "1")
    End If
    
    Command.Parameters.AddWithValue("Base", TextBoxBase.Text)
    Command.Parameters.AddWithValue("BaseMinima", TextBoxBaseMin.Text)
    Command.Parameters.AddWithValue("BaseMaxima", TextBoxBaseMax.Text)
    Command.Parameters.AddWithValue("Altura", TextBoxAltura.Text)
    Command.Parameters.AddWithValue("AlturaMinima", TextBoxAlturaMin.Text)
    Command.Parameters.AddWithValue("AlturaMaxima", TextBoxAlturaMax.Text)
    Command.Parameters.AddWithValue("Espessura", TextBoxEspessura.Text)
    Command.Parameters.AddWithValue("EspessuraSerra", TextBoxEspessuraSerra.Text)
    Command.Parameters.AddWithValue("Textura", TextBoxTextura.Text)
    Command.Parameters.AddWithValue("CodigoSelecionado", LabelCodigoSelecionado.Text)
    
    con.Open()
    Command.ExecuteNonQuery()
    con.Close()
    
    MsgBox("Chapa editada com sucesso!")
    ComboChapas.Items.Clear()
    CarregaDados()
    

    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    • Marcado como Resposta Bruno Gaiola segunda-feira, 14 de fevereiro de 2011 17:14
    segunda-feira, 14 de fevereiro de 2011 17:10
    Moderador

Todas as Respostas

  • Bruno aparentemente está correto tenta fazer o seguinte preencha os parâmetros do command na mesma ordem que vc declarou no comando sql e veja se funciona.
    Estudar, Estudar e Estudar! Não existe caminho curto.
    segunda-feira, 14 de fevereiro de 2011 15:57
  • Então,

    continua a mesma coisa, ele chega ate o fim, exibe a mensagem 

    mas nao insere no banco

     

     


    Bruno Gaiola Domus & Lepton Des. Software
    segunda-feira, 14 de fevereiro de 2011 16:05
  • @Bruno

    Existe problema de logica no teu codigo. Voce criou uma codicao if:

     

    f CheckBoxRotacionar.Checked = False Then
        Command.Parameters.AddWithValue("@Rotacionar", "0")
    queres gravar isto?
       Else
        Command.Parameters.AddWithValue("@Rotacionar", "1")
    queres gravar?
       End If
    
       con.Open()
       Command.ExecuteNonQuery()
       con.Close()
    
       MsgBox("Chapa editada com sucesso!")
       ComboChapas.Items.Clear()
       CarregaDados()
      Catch ex As Exception
       MsgBox(ex.Message)
      End Try
    

    Faz Asim:

     

    f CheckBoxRotacionar.Checked = False Then
        Command.Parameters.AddWithValue("@Rotacionar", "0")
      con.Open()
       Command.ExecuteNonQuery()
       con.Close()
    
      MsgBox("Chapa editada com sucesso!")
       ComboChapas.Items.Clear()
       CarregaDados()

    Else Command.Parameters.AddWithValue("@Rotacionar", "1")
      con.Open()
       Command.ExecuteNonQuery()
       con.Close()
    
      MsgBox("Chapa editada com sucesso!")
       ComboChapas.Items.Clear()
       CarregaDados()

    End If Catch ex As Exception MsgBox(ex.Message) End Try


    Just Be Humble Malange!
    • Marcado como Resposta Bruno Gaiola segunda-feira, 14 de fevereiro de 2011 17:15
    segunda-feira, 14 de fevereiro de 2011 16:27
  • Entao, a Lógica é exatamente a mesma 

    eu escrevo 0 ou 1 de acordo com a marcação da checkbox

    o exmplo que voce me deu é praticamente a mesma coisa

     

    e  continua o mesmo problema.


    Bruno Gaiola Domus & Lepton Des. Software
    segunda-feira, 14 de fevereiro de 2011 16:35
  • Bruno percebi que vc está atualizando o "codigo" se esse codigo for chave primária ele não deve ser alterado ai vc terá que apagar esta parte em sua query: Codigo=@Codigo e eliminar esta:  "Command.Parameters.AddWithValue("@Codigo", TextBoxCodigo.Text) e testa ^veja se funciona.

    Abraços e lembre-se de verificar a ordem de preenchimentos dos parâmetros.

     


    Estudar, Estudar e Estudar! Não existe caminho curto.
    • Marcado como Resposta Bruno Gaiola segunda-feira, 14 de fevereiro de 2011 17:15
    segunda-feira, 14 de fevereiro de 2011 16:35
  • Então,

    o campo codigo,

    realmente é chave primaria

    mas mesmo removendo ele da query e eliminando a linha do command ele ainda nao funciona


    Bruno Gaiola Domus & Lepton Des. Software
    • Marcado como Resposta Bruno Gaiola segunda-feira, 14 de fevereiro de 2011 17:15
    • Não Marcado como Resposta AndreAlvesLimaModerator segunda-feira, 14 de fevereiro de 2011 22:15
    segunda-feira, 14 de fevereiro de 2011 17:01
  • Bruno,

    Segundo a documentação (http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx) o OleDbCommand não suporta parâmetros nomeados... Para passar os parâmetros, você deve utilizar o sinal de interrogação e incluir os parâmetros na ordem correta:

    • The OLE DB .NET Provider does not support named parameters for passing parameters to an SQL statement or a stored procedure called by an OleDbCommand when CommandType is set to Text. In this case, the question mark (?) placeholder must be used. For example:
    • SELECT * FROM Customers WHERE CustomerID = ?
    • Therefore, the order in which OleDbParameter objects are added to the OleDbParameterCollection must directly correspond to the position of the question mark placeholder for the parameter in the command text.

    Portanto, tente alterar o seu código para exatamente o seguinte e veja se funciona:

    Dim Command As OleDbCommand = New OleDbCommand("update Chapas set Codigo=?, CodigoEx=?, Descricao=?, Preco=?, Peso=?, Rotacionar=?, Base=?, BaseMinima=?, BaseMaxima=?, Altura=?, AlturaMinima=?, AlturaMaxima=?, Espessura=?, EspessuraSerra=?, Textura=? where Codigo=?", con)
    
    Command.Parameters.AddWithValue("Codigo", TextBoxCodigo.Text)
    Command.Parameters.AddWithValue("CodigoEx", TextBoxCodigoEx.Text)
    Command.Parameters.AddWithValue("Descricao", TextBoxDescricao.Text)
    Command.Parameters.AddWithValue("Preco", TextBoxPreco.Text)
    Command.Parameters.AddWithValue("Peso", TextBoxPeso.Text)
    
    If CheckBoxRotacionar.Checked = False Then
     Command.Parameters.AddWithValue("Rotacionar", "0")
    Else
     Command.Parameters.AddWithValue("Rotacionar", "1")
    End If
    
    Command.Parameters.AddWithValue("Base", TextBoxBase.Text)
    Command.Parameters.AddWithValue("BaseMinima", TextBoxBaseMin.Text)
    Command.Parameters.AddWithValue("BaseMaxima", TextBoxBaseMax.Text)
    Command.Parameters.AddWithValue("Altura", TextBoxAltura.Text)
    Command.Parameters.AddWithValue("AlturaMinima", TextBoxAlturaMin.Text)
    Command.Parameters.AddWithValue("AlturaMaxima", TextBoxAlturaMax.Text)
    Command.Parameters.AddWithValue("Espessura", TextBoxEspessura.Text)
    Command.Parameters.AddWithValue("EspessuraSerra", TextBoxEspessuraSerra.Text)
    Command.Parameters.AddWithValue("Textura", TextBoxTextura.Text)
    Command.Parameters.AddWithValue("CodigoSelecionado", LabelCodigoSelecionado.Text)
    
    con.Open()
    Command.ExecuteNonQuery()
    con.Close()
    
    MsgBox("Chapa editada com sucesso!")
    ComboChapas.Items.Clear()
    CarregaDados()
    

    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    • Marcado como Resposta Bruno Gaiola segunda-feira, 14 de fevereiro de 2011 17:14
    segunda-feira, 14 de fevereiro de 2011 17:10
    Moderador