none
Atualizar Ajuste no Banco RRS feed

  • Pergunta

  • Olá,

    Criei um Binding Source
    e fiz a seguinte conexão

            conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\CadastroDobradiças\Biblioteca_Ferragens\ferragens.mdb")
            conn.Open()

            adapter = New OleDbDataAdapter("select * from Dobradicas", conn)
            ds = New DataSet()

            Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)
            adapter.UpdateCommand = builder.GetUpdateCommand()


            adapter.Fill(ds, "Dobradicas")

            bs1 = New BindingSource(ds.Tables("Dobradicas"), "")

            TextBox1.DataBindings.Add("Text", bs1, "Codigo")
            TextBox2.DataBindings.Add("Text", bs1, "Nome")
            TextBox3.DataBindings.Add("Text", bs1, "A")
            TextBox4.DataBindings.Add("Text", bs1, "B")
            TextBox5.DataBindings.Add("Text", bs1, "C")
            TextBox6.DataBindings.Add("Text", bs1, "D")
            TextBox7.DataBindings.Add("Text", bs1, "E")
            TextBox8.DataBindings.Add("Text", bs1, "F")
            TextBox9.DataBindings.Add("Text", bs1, "Descricao")




    agora, quando eu editar os campos e clicar em salvar tenho que fazer isso para salvar as alteraçoes(???) :


           BindingContext(ds.Tables("dobradicas")).EndCurrentEdit()
            adapter.Update(ds.Tables("dobradiacas"))




    esta correto ?
    sexta-feira, 30 de outubro de 2009 10:57

Respostas

  • BindingContext(ds.Tables("dobradicas")).EndCurrentEdit()
    adapter.Update(ds.Tables("dobradiacas"))

    essas linhas deveriam ser:

    BindingContext(ds.Tables("Dobradicas")).EndCurrentEdit()
    adapter.Update(ds.Tables("Dobradicas"))

    o nome do datatable esta errado

    • Marcado como Resposta Bruno Gaiola sexta-feira, 30 de outubro de 2009 16:45
    sexta-feira, 30 de outubro de 2009 16:38
  • Se você está adicionando o mesmo valor para alguma chave por exemplo Codigo, se você ja tem no banco o codigo 1 e tenta novamente inserir o codigo 1 ele dará erro, pois é uma chave primária e com isso é um campo que tem que ser único, não pode haver o mesmo valor. Fique atento a isso.
    • Marcado como Resposta Bruno Gaiola sexta-feira, 30 de outubro de 2009 17:41
    sexta-feira, 30 de outubro de 2009 17:40
  • Isso mesmo Bruno.
    • Marcado como Resposta Bruno Gaiola sexta-feira, 30 de outubro de 2009 17:42
    sexta-feira, 30 de outubro de 2009 14:35
  • na hora de atulizar da o erro na sgunda linha

    Valor não pode ser nulo. Nome do parâmetro: dataTable


    e nao salva
    • Marcado como Resposta Bruno Gaiola sexta-feira, 30 de outubro de 2009 17:42
    sexta-feira, 30 de outubro de 2009 15:20
  • fiz exatamente assim

     Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            Dim cmdPesquisa As OleDbCommand = New OleDbCommand("select count(*) from dobradicas where Codigo = @Codigo", conn)

            If Convert.ToInt32(cmdPesquisa.ExecuteScalar) > 0 Then
                BindingContext(ds.Tables("Dobradicas")).EndCurrentEdit()
                adapter.Update(ds.Tables("Dobradicas"))

            Else
                salvanew()

            End If

            
            
        End Sub




    da erro nessa linha 

            If Convert.ToInt32(cmdPesquisa.ExecuteScalar) > 0 Then


    erro: Nenhum valor foi fornecido para um ou mais parâmetros necessários.



    • Marcado como Resposta Bruno Gaiola sexta-feira, 30 de outubro de 2009 17:34
    • Não Marcado como Resposta Bruno Gaiola sexta-feira, 30 de outubro de 2009 17:42
    • Marcado como Resposta Bruno Gaiola sexta-feira, 30 de outubro de 2009 17:42
    sexta-feira, 30 de outubro de 2009 17:24

Todas as Respostas

  • Isso mesmo Bruno.
    • Marcado como Resposta Bruno Gaiola sexta-feira, 30 de outubro de 2009 17:42
    sexta-feira, 30 de outubro de 2009 14:35
  • na hora de atulizar da o erro na sgunda linha

    Valor não pode ser nulo. Nome do parâmetro: dataTable


    e nao salva
    • Marcado como Resposta Bruno Gaiola sexta-feira, 30 de outubro de 2009 17:42
    sexta-feira, 30 de outubro de 2009 15:20
  • BindingContext(ds.Tables("dobradicas")).EndCurrentEdit()
    adapter.Update(ds.Tables("dobradiacas"))

    essas linhas deveriam ser:

    BindingContext(ds.Tables("Dobradicas")).EndCurrentEdit()
    adapter.Update(ds.Tables("Dobradicas"))

    o nome do datatable esta errado

    • Marcado como Resposta Bruno Gaiola sexta-feira, 30 de outubro de 2009 16:45
    sexta-feira, 30 de outubro de 2009 16:38
  • ok, deu certo
    mas nesse caso
    eu atualizo um cadastro que ja existe
    mas por exemplo eu criei um novo e quero salva-lo

    fiz uma função diferente 
    ficou assim :

         Dim conn As New OleDbConnection()
            conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\CadastroDobradiças\Biblioteca_Ferragens\ferragens.mdb"
            conn.Open()

            Dim cmd As OleDbCommand = New OleDbCommand("INSERT INTO Dobradicas(Codigo, Nome, A, B, C, D, E, F, Descricao)" + ("VALUES  (@Codigo, @Nome, @A, @B, @C, @D, @E, @F, @Descrição)"), conn)

            cmd.Parameters.AddWithValue("Codigo", TextBox1.Text)
            cmd.Parameters.AddWithValue("Nome", TextBox2.Text)
            cmd.Parameters.AddWithValue("A", TextBox3.Text)
            cmd.Parameters.AddWithValue("B", TextBox4.Text)
            cmd.Parameters.AddWithValue("C", TextBox5.Text)
            cmd.Parameters.AddWithValue("D", TextBox6.Text)
            cmd.Parameters.AddWithValue("E", TextBox7.Text)
            cmd.Parameters.AddWithValue("F", TextBox8.Text)
            cmd.Parameters.AddWithValue("Descricao", TextBox9.Text)
            cmd.ExecuteNonQuery()
            conn.Close()

            bs1.AddNew()



    mas quero colocar as duas no mesmo botão
    separadas por uma  condicional que vai checar se ja existe ou nao

    caso exista ele executa isso:

    BindingContext(ds.Tables("Dobradicas")).EndCurrentEdit()
    adapter.Update(ds.Tables("Dobradicas"))



    como posso faze essa condicional?
    sexta-feira, 30 de outubro de 2009 16:54
  • Você pode fazer um consulta assim:

    Dim cmdPesquisa As OleDbCommand = New OleDbCommand("select count(*) from dobradicas where Codigo = @Codigo", conn)

    if Convert.ToInt32(cmdPesquisa.ExecuteScalar) > 0 then
         // funcao de atualizacao
    else
        // funcao de insercao
    end if
    sexta-feira, 30 de outubro de 2009 17:04
  • fiz exatamente assim

     Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            Dim cmdPesquisa As OleDbCommand = New OleDbCommand("select count(*) from dobradicas where Codigo = @Codigo", conn)

            If Convert.ToInt32(cmdPesquisa.ExecuteScalar) > 0 Then
                BindingContext(ds.Tables("Dobradicas")).EndCurrentEdit()
                adapter.Update(ds.Tables("Dobradicas"))

            Else
                salvanew()

            End If

            
            
        End Sub




    da erro nessa linha 

            If Convert.ToInt32(cmdPesquisa.ExecuteScalar) > 0 Then


    erro: Nenhum valor foi fornecido para um ou mais parâmetros necessários.



    • Marcado como Resposta Bruno Gaiola sexta-feira, 30 de outubro de 2009 17:34
    • Não Marcado como Resposta Bruno Gaiola sexta-feira, 30 de outubro de 2009 17:42
    • Marcado como Resposta Bruno Gaiola sexta-feira, 30 de outubro de 2009 17:42
    sexta-feira, 30 de outubro de 2009 17:24
  • Sim Bruno como você fez assim veja o parâmetro @Codigo, você terá que fazer:

    Dim cmdPesquisa As OleDbCommand = New OleDbCommand("select count(*) from dobradicas where Codigo = @Codigo", conn)
    cmdPesquisa.Parameters.AddWithValue("@Codigo", TextBox1.Text)

    if Convert.ToInt32(cmdPesquisa.ExecuteScalar) > 0 then
         // funcao de atualizacao
    else
        // funcao de insercao
    end if
    sexta-feira, 30 de outubro de 2009 17:29
  • a sim, agora entendi

    obrigado =)

    mas uma coisa q eu notei

    se quando rodo o programa

    crio um novo salvo
    dai vou alterar outro ja salvo

    da esse erro :

    As alterações solicitadas para a tabela não foram satisfatórias já que criariam valores duplicados no índice, chave primária ou relação. Altere os dados no campo ou campos que contêm os dados duplicados, remova o índice ou redefina o índice para possibilitar entradas duplicadas e tente novamente.


    mas se eu apenas altero  e salvo nao da o erro


    e se apenas crio um novo e nao faço mais nada tambem nao da
    sexta-feira, 30 de outubro de 2009 17:33
  • Se você está adicionando o mesmo valor para alguma chave por exemplo Codigo, se você ja tem no banco o codigo 1 e tenta novamente inserir o codigo 1 ele dará erro, pois é uma chave primária e com isso é um campo que tem que ser único, não pode haver o mesmo valor. Fique atento a isso.
    • Marcado como Resposta Bruno Gaiola sexta-feira, 30 de outubro de 2009 17:41
    sexta-feira, 30 de outubro de 2009 17:40