Usuário com melhor resposta
Problema com update no access

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?
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
Todas as Respostas
-
-
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.
- Sugerido como Resposta Thiago Martins Coelho sexta-feira, 18 de maio de 2012 19:38
- Não Sugerido como Resposta Thiago Martins Coelho 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
-
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
-
-
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