[RESOLVIDO] Problema com UPDATE no BD Access!

2 respostas
J

[color=red]Estou com problema na hora de salvar no banco de dados os dados que foram editados. Primeiro o programa acusava o erro de não salvar os dados, contudo agora o programa retorna a mensagem de que os dados foram editados com sucesso, porém quando verifico na tabela do Access, o campo referente a edição não está alterado. O código está abaixo:

OBS: O PRIMEIRO CAMPO DA MINHA TABELA É O cod, que é minha chave primária, contudo na hora do primeiro cadastro eu que passo o código para ser registrado na tabela, e ao fazer UPDATE no BD não quero alterar o campo cod.

Peço que analisem o código e apontem onde está meu erro. Sou iniciante nessa área e tenho um pouco de dificuldade.[/color]

Segue uma parte do código que faz a ação do botão para editar:

if (e.getSource()==  Bedit){
	
	if(Tx1.getText().trim().isEmpty()){
	Tx1.setBackground(Color.yellow);
	JOptionPane.showMessageDialog(null,"PREENCHA O CAMPO CÓDIGO DO CLIENTE", "ATENÇÃO!", JOptionPane.INFORMATION_MESSAGE);
		Tx1.setBackground(Color.white);
		return;
		}
.
.
.
} 
	else{
	String est = (String)uf.getSelectedItem();  
	a2.setNome(Tx2.getText()); 
	a2.setRg(Tx3.getText());
	a2.setCpf(Tx4.getText()); 
	a2.setData(Tx5.getText()); 
	a2.setTel(Tx6.getText());
	a2.setCel(Tx7.getText()); 
	a2.setEmail(Tx8.getText()); 
	a2.setEnd(Tx9.getText());
	a2.setNum(Tx10.getText()); 
	a2.setBairro(Tx13.getText());
	a2.setComple(Tx11.getText()); 
	a2.setCidade(Tx12.getText());
	a2.setEstado(est);
	com.editar(a2); 
	limparCaixas(getContentPane()); 
	}
	}
Segue a parte do código que executa o método editar:
public void editar(acessopf a2){
    
try {
	String SQL = "UPDATE tabfisica SET (nome,rg,cpf,data,tel,cel,email,end,num,bairro,comple,cidade,estado)values(?,?,?,?,?,?,?,?,?,?,?,?,?) WHERE cod ="+a2.getCod();

	PreparedStatement pstm = conloc.conexao.prepareStatement(SQL);
    //pstm.setString(1, a2.getCod());
    pstm.setString(1, a2.getNome());
    pstm.setString(2, a2.getRg());
    pstm.setString(3, a2.getCpf());
    pstm.setString(4, a2.getData());
    pstm.setString(5, a2.getTel());
    pstm.setString(6, a2.getCel());
    pstm.setString(7, a2.getEmail());
    pstm.setString(8, a2.getEnd());
    pstm.setString(9, a2.getNum());
    pstm.setString(10, a2.getBairro());
    pstm.setString(11, a2.getComple());
    pstm.setString(12, a2.getCidade());
    pstm.setString(13, a2.getEstado());
    pstm.close();
    
    JOptionPane.showMessageDialog(null,"DADOS EDITADOS COM SUCESSO!");
    
} catch (SQLException ex) {
    JOptionPane.showMessageDialog(null,"ERRO AO SALVAR OS DADOS!\n"+ex);
    pesquisar pes = new pesquisar();
    pes.limparCaixas(pes);
}
}

Desde já agradeço.

2 Respostas

sech777

Antes da linha 21:pstm.close(); altere para ficar assim:

pstm.executeUpdate();
conloc.conexao.commit();
pstm.close();

Depois, leia este artigo que vai te ajudar muito.
http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

J

Obrigado pelas explicações.

Consegui resolver meu problema depois de muita procura na net por problemas parecidos com o meu.

Antes estava assim:

public void editar(acessopf a2){  
      
try {  
   String SQL = "UPDATE tabfisica SET (nome,rg,cpf,data,tel,cel,email,end,num,bairro,comple,cidade,estado)values(?,?,?,?,?,?,?,?,?,?,?,?,?) WHERE cod ="+a2.getCod();  
  
   PreparedStatement pstm = conloc.conexao.prepareStatement(SQL);  
    //pstm.setString(1, a2.getCod());  
    pstm.setString(1, a2.getNome());  
    pstm.setString(2, a2.getRg());  
    pstm.setString(3, a2.getCpf());  
    pstm.setString(4, a2.getData());  
    pstm.setString(5, a2.getTel());  
    pstm.setString(6, a2.getCel());  
    pstm.setString(7, a2.getEmail());  
    pstm.setString(8, a2.getEnd());  
    pstm.setString(9, a2.getNum());  
    pstm.setString(10, a2.getBairro());  
    pstm.setString(11, a2.getComple());  
    pstm.setString(12, a2.getCidade());  
    pstm.setString(13, a2.getEstado());  
    pstm.close();  
      
    JOptionPane.showMessageDialog(null,"DADOS EDITADOS COM SUCESSO!");  
      
} catch (SQLException ex) {  
    JOptionPane.showMessageDialog(null,"ERRO AO SALVAR OS DADOS!\n"+ex);  
    pesquisar pes = new pesquisar();  
    pes.limparCaixas(pes);  
}  
}

Fiz algumas alterações e ficou dessa forma:

public void editar(acessopf a2){
    	
		String SQL = "UPDATE tabfisica SET nome =?,rg =?,cpf =?,data =?,tel =?,cel =?,email =?,end =?,num =?,bairro =?,comple =?,cidade =?,estado =? WHERE cod =?";
		
		try {  

		PreparedStatement pstm = conloc.conexao.prepareStatement(SQL);
		pstm.setString(1, a2.getNome());  
		pstm.setString(2, a2.getRg());  
		pstm.setString(3, a2.getCpf());  
		pstm.setString(4, a2.getData());  
		pstm.setString(5, a2.getTel());  
		pstm.setString(6, a2.getCel());  
		pstm.setString(7, a2.getEmail());  
		pstm.setString(8, a2.getEnd());  
		pstm.setString(9, a2.getNum());  
		pstm.setString(10, a2.getBairro());  
		pstm.setString(11, a2.getComple());  
		pstm.setString(12, a2.getCidade());  
		pstm.setString(13, a2.getEstado());
		pstm.setString(14, a2.getCod());
		pstm.executeUpdate(); 
		pstm.close();
		JOptionPane.showMessageDialog(null,"DADOS EDITADOS COM SUCESSO!");
    
} catch (SQLException ex) {
    JOptionPane.showMessageDialog(null,"ERRO AO SALVAR OS DADOS!\n"+ex);
    pesquisar pes = new pesquisar();
    pes.limparCaixas(pes);
}
}

Utilizei o PreparedStatement que evito ficar concatenando muitas strings, e uma aspa errada dá um problema danado.

Agora está funcionando perfeitamente a atualização de dados no BD.

Vou partir agora para o excluir dados no BD ;)

Muito obrigado mesmo pela ajuda!!!

Criado 27 de abril de 2012
Ultima resposta 28 de abr. de 2012
Respostas 2
Participantes 2