none
Problema com update no access RRS feed

  • Pergunta

  • Boa tarde, estou desenvolvendo um projeto em windows forms e access. A princípio notei que todas as operações de update não eram realizadas, mas também não retornavam nenhum erro. em algumas tabelas menores comecei a atualizar todos os dados, ou seja, se eu tinha uma tabela com 2 campos e precisava atualizar um, eu obrigatoriamente tenho que escrever o comando para atualizar os dois campos, senão ele não atualiza nada. mas e nas tabelas maiores? tenho realmente que atualizar todos os campos?
    sexta-feira, 18 de maio de 2012 18:58

Respostas

  • Tenta colocar um breakpoint e ver se os valores de:

    cmd.Parameters.AddWithValue("@id", c.id); //aqui o breakpoint
    cmd.Parameters.AddWithValue("@name", c.Name);
    cmd.Parameters.AddWithValue("@doc", c.doc);


    estão corretos.

    tenta colocar os parametros na ordem em que eles aparecem também:

    cmd.Parameters.AddWithValue("@name", c.Name);
    cmd.Parameters.AddWithValue("@doc", c.doc);
    cmd.Parameters.AddWithValue("@id", c.id);

    Verifica se a conexão com o banco está correta, bom, por enquanto é isso que tenho em mente!


    thiagokoelho

    • Marcado como Resposta A.ime sexta-feira, 18 de maio de 2012 20:14
    sexta-feira, 18 de maio de 2012 20:08

Todas as Respostas

  • Não, dá para atualizar um só, mostra aí como você está fazendo.


    Abraços!


    thiagokoelho

    sexta-feira, 18 de maio de 2012 19:07
  • oi Tiago, valeu por retornar.

    A tabela onde estou tentando fazer o update é assim: tblClient(id(pk),from(fk),name,nick,doc,user(fk)) e o comando que estou usando é: Update [tblClient] set [name] = @name, [doc] = @doc where [id] = @id. Isso porque nome e documento são os únicos campos que eu quero alterar, mas como eu disse, não retorna nenhum erro, os parâmetros estão corretos, mas quando consulto o banco vejo que nada foi alterado.

    sexta-feira, 18 de maio de 2012 19:24
  • Mas como está fazendo no código?

    thiagokoelho

    sexta-feira, 18 de maio de 2012 19:39
  • o método que eu uso para colher os dados é:

     private void btnEdit_Click(object sender, EventArgs e)
            {
                try
                {
                    if (btnEdit.Text.Equals("Editar"))
                    {
                        ...
                    }
                    else
                    {
                        Client c = new Client();                     
                        c.Statedoc = txtdoce.Text.Replace("/", "").Replace("-", "").Replace(".", "");
                        c.id = client.id;                   
    
                        rep.UpdateClient(c);
                      
                        btnEdit.Text = "Editar";
                        cboCliente.Items.Add(c);
                        ClearFields();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

    o método do repositório é o seguinte:

    public void UpdateClient(Client c)
    {
    using (OleDbConnection con = new OleDbConnection(_strcon))
      {
         con.Open();
         using (OleDbCommand cmd = new OleDbCommand("Update [tblClient] set [name] = @name, [doc] = @doc where [id] = @id", con))
             {
                 cmd.Parameters.AddWithValue("@id", c.id);
                 cmd.Parameters.AddWithValue("@name", c.Name);
                 cmd.Parameters.AddWithValue("@doc", c.doc);
               
                 cmd.ExecuteNonQuery();
              }
        }
    }


    • Editado A.ime sexta-feira, 18 de maio de 2012 19:50 erro de escrita
    sexta-feira, 18 de maio de 2012 19:49
  • Tenta colocar um breakpoint e ver se os valores de:

    cmd.Parameters.AddWithValue("@id", c.id); //aqui o breakpoint
    cmd.Parameters.AddWithValue("@name", c.Name);
    cmd.Parameters.AddWithValue("@doc", c.doc);


    estão corretos.

    tenta colocar os parametros na ordem em que eles aparecem também:

    cmd.Parameters.AddWithValue("@name", c.Name);
    cmd.Parameters.AddWithValue("@doc", c.doc);
    cmd.Parameters.AddWithValue("@id", c.id);

    Verifica se a conexão com o banco está correta, bom, por enquanto é isso que tenho em mente!


    thiagokoelho

    • Marcado como Resposta A.ime sexta-feira, 18 de maio de 2012 20:14
    sexta-feira, 18 de maio de 2012 20:08
  • resolveu ordenando os parâmetros conforme a query, só não entendi como isso pode influenciar tanto. Muitíssimo obrigada.
    sexta-feira, 18 de maio de 2012 20:16
  • Então, no SQL Server eu nunca tive esse problema de ordenação de parâmetros, já tive esse problema com Oracle e é a primeira vez que vejo com Access, é sempre bom aprender, sugiro a todos que lerem essa thread que coloque seus parâmetros sempre na ordem em que eles aparecem para evitar problemas.


    thiagokoelho

    sexta-feira, 18 de maio de 2012 20:23