Como verificar se campo foi alterado?!

ola pessoal, seguinte!

tenho um formulário com dois campos, telefone e celular (mais vários, mas o que me interessa são esses)

quando abro o formulário esse campos (telefone e celular) estão preenchidos de acordo com o que retornou do banco de dados…

agora preciso que ao clicar em um botão dispare o método de UPDATE (no banco de dados) somente se o numero for alterado!

se não for alterado os números , não faço nada!

como posso fazer essa verificação? Grato.

Quando voce seta as informações nos campos, elas ficam na memoria correto?

Basta você utiliza essas informações e comparar com o texto que foi digitado.

Você também poderia incluir uma action de que se algum tecla for pressionada, ‘entendesse’ que algo foi alterado. Porém, nesse caso, se estava escrito ‘GLEIDSON’, a pessoa apagou o N e digitou novamente, a informação não está diferente do banco de dados…

Não sei se existe uma maneira mais fácil… Vamos esperar se o povão dê uma ideia melhor. Se tiver uma maneira melhor, pra mim também é interessante… hehe

Abraços

Eu faço isso utilizando trigger, ou seja direto no banco.

[quote=Gleidson Henrique]Quando voce seta as informações nos campos, elas ficam na memoria correto?

Basta você utiliza essas informações e comparar com o texto que foi digitado.

Você também poderia incluir uma action de que se algum tecla for pressionada, ‘entendesse’ que algo foi alterado. Porém, nesse caso, se estava escrito ‘GLEIDSON’, a pessoa apagou o N e digitou novamente, a informação não está diferente do banco de dados…

Não sei se existe uma maneira mais fácil… Vamos esperar se o povão dê uma ideia melhor. Se tiver uma maneira melhor, pra mim também é interessante… hehe

Abraços[/quote]

Exatamente como o amigo acima disse, no caso você poderá fazer uma comparação entre a variável com o valor que retornou do banco, e o value do seu campo do formulário.

se (" variável do banco" telefone != value do campo ex. telefone "pois se ele foi alterado estará diferente do conteúdo da variável, por que o form fica armazenado na memória ") {

faça o update do campo telefone no banco de dados.

}

Opa, augusto340, beleza?

E se você colocar nesses seus JTextFields alguns listeners para verificar isso?
Você pode adicionar KeyListeners neles e, ao ativar o evento keyPressed, você altera uma variável global para true.
Algo como:

[code]public class Formulario extends JDialog {

private boolean atualizarRegistro = false;
private JTextField campo;
private JButton botao;

public Formulario() {

    campo = new JTextField(50);
    campo.setText("Texto");
    campo.addKeyListener(new AlteracaoFormularioKeyListener());

    botao = new JButton("Confirmar");
    botao.addActionListener(new ConfirmarActionListener());
}

private class AlteracaoFormularioKeyListener implements KeyListener {

    public void keyPressed(KeyEvent event) {
        atualizarRegistro = true;
    }
}

private class ConfirmarActionListener implements ActionListener {

    public void actionPerformed(ActionEvent event) {

        if (!atualizarRegistro) {
            // rotina de inserção.
        }
        else {
            // rotina de atualização.
        }
    }
}

}[/code]

Que tal?

Abraços,
fique com Deus! :smiley:

[quote=Nicolas Fernandes]Opa, augusto340, beleza?

E se você colocar nesses seus JTextFields alguns listeners para verificar isso?
Você pode adicionar KeyListeners neles e, ao ativar o evento keyPressed, você altera uma variável global para true.
Algo como:

[code]public class Formulario extends JDialog {

private boolean atualizarRegistro = false;
private JTextField campo;
private JButton botao;

public Formulario() {

    campo = new JTextField(50);
    campo.setText("Texto");
    campo.addKeyListener(new AlteracaoFormularioKeyListener());

    botao = new JButton("Confirmar");
    botao.addActionListener(new ConfirmarActionListener());
}

private class AlteracaoFormularioKeyListener implements KeyListener {

    public void keyPressed(KeyEvent event) {
        atualizarRegistro = true;
    }
}

private class ConfirmarActionListener implements ActionListener {

    public void actionPerformed(ActionEvent event) {

        if (!atualizarRegistro) {
            // rotina de inserção.
        }
        else {
            // rotina de atualização.
        }
    }
}

}[/code]

Que tal?

Abraços,
fique com Deus! :D[/quote]

Foi o que eu citei, porém, na minha opinião, o melhor jeito é o outro.

Dessa maneira, a cada tecla digitada, ele irá executar o listener. É realmente muito inviável. Uma ideia um pouco melhor seria ao perder o foco… Porém, ainda continuo com a primeira ideia que falei, visto que é somente uma vez que sera executado a condição e também somente se comunicará com o banco de dados e atualizará se realmente for diferente…

Abraços

[quote=Gleidson Henrique]Foi o que eu citei, porém, na minha opinião, o melhor jeito é o outro.

Dessa maneira, a cada tecla digitada, ele irá executar o listener. É realmente muito inviável. Uma ideia um pouco melhor seria ao perder o foco… Porém, ainda continuo com a primeira ideia que falei, visto que é somente uma vez que sera executado a condição e também somente se comunicará com o banco de dados e atualizará se realmente for diferente…

Abraços[/quote]

Gleidson Henrique, sua solução também é válida. Nós dois vimos a situação de um modo diferente. Eu, pelo menos, vejo um formulário com o botão SALVAR desabilitado quando ele seleciona um registro e, ao começar a alterar, o botão de SALVAR se torna habilitado, sabe? Aquelas coisas de, se você começou a alterar o registro e vai sair daquela tela, dá aquela mensagem “Você deseja salvar as alterações?”. Essa é a minha visão. Você viu de um modo diferente: somente ao clicar no SALVAR é que valida essas alterações. Também é válida. Para a minha visão da situação, o jeito que descrevi é melhor. Para a sua visão, o seu jeito é bem melhor. É tudo uma questão de perspectiva e necessidade de funcionalidade, mas sim, a sua solução é muito viável. Até aconselho, se a situação do augusto340 for igual a sua.

Fiquem com Deus! :smiley:

[quote=Nicolas Fernandes][quote=Gleidson Henrique]Foi o que eu citei, porém, na minha opinião, o melhor jeito é o outro.

Dessa maneira, a cada tecla digitada, ele irá executar o listener. É realmente muito inviável. Uma ideia um pouco melhor seria ao perder o foco… Porém, ainda continuo com a primeira ideia que falei, visto que é somente uma vez que sera executado a condição e também somente se comunicará com o banco de dados e atualizará se realmente for diferente…

Abraços[/quote]

Gleidson Henrique, sua solução também é válida. Nós dois vimos a situação de um modo diferente. Eu, pelo menos, vejo um formulário com o botão SALVAR desabilitado quando ele seleciona um registro e, ao começar a alterar, o botão de SALVAR se torna habilitado, sabe? Aquelas coisas de, se você começou a alterar o registro e vai sair daquela tela, dá aquela mensagem “Você deseja salvar as alterações?”. Essa é a minha visão. Você viu de um modo diferente: somente ao clicar no SALVAR é que valida essas alterações. Também é válida. Para a minha visão da situação, o jeito que descrevi é melhor. Para a sua visão, o seu jeito é bem melhor. É tudo uma questão de perspectiva e necessidade de funcionalidade, mas sim, a sua solução é muito viável. Até aconselho, se a situação do augusto340 for igual a sua.

Fiquem com Deus! :D[/quote]

Com certeza amigo hehe

Ambas são funcionais… Sobre o modo que você faz, eu acho interessante também, porém, muito trabalhoso. Na verdade eu acho o seu método melhor que o meu. Aproveitando, deixa eu te fazer uma pergunta, as vezes, quem sabe passo a utilizar dessa maneira também… Você define um listener para cada campo, igual colocou no exemplo? Se sim, será que não tem um jeito de definir por exemplo uma única vez para o formulario em que os campos estão e automaticamente o formulário ve isso?

Abraços

se estiver usando o hibernate usa o saveOrUpdate(Objeto).

se nao, informe como voce esta fazendo a persistencia: diretamento usando comandos SQLs ?, como esta o metodo save ?

Se for pelo SQL, voce pode implementar uma consulta antes:

SELECT * FROM caboco WHERE id = ?

isso se tiver como verificar o ID na tela, ou entao melhor, quando ele recuperar o dado e por nos textfields, voce pode salvar tb o ID do caboco em uma variavel e depois fazer o select sempre antes de salvar, se ele encontrar o ID igual no select, voce executa update, se nao, executa save.

Compliquei muito ? ‘-’

Boa sorte!!!

[quote=rof20004]se estiver usando o hibernate usa o saveOrUpdate(Objeto).

se nao, informe como voce esta fazendo a persistencia: diretamento usando comandos SQLs ?, como esta o metodo save ?

Se for pelo SQL, voce pode implementar uma consulta antes:

SELECT * FROM caboco WHERE id = ?

isso se tiver como verificar o ID na tela, ou entao melhor, quando ele recuperar o dado e por nos textfields, voce pode salvar tb o ID do caboco em uma variavel e depois fazer o select sempre antes de salvar, se ele encontrar o ID igual no select, voce executa update, se nao, executa save.

Compliquei muito ? ‘-’

Boa sorte!!![/quote]

Vixi, e como… Pelo o que eu entendi, ele já puxa as informações na tela. Quando ele puxa as informações, ele nao limpa o objeto que elas contem, ou seja, ele pode utilizar estes mesmo objetos… Isso que você falou compensa ele mandar salvar direto hehe

Abraços

Na verdade, o select manual que expliquei, é parecido com o saveOrUpdate do hibernate, so isso.

Assim, ele alterando um campo ou nao, ele manteria o mesmo objeto na base de dados, nao salvaria um novo.

[quote=Gleidson Henrique]Com certeza amigo hehe

Ambas são funcionais… Sobre o modo que você faz, eu acho interessante também, porém, muito trabalhoso. Na verdade eu acho o seu método melhor que o meu. Aproveitando, deixa eu te fazer uma pergunta, as vezes, quem sabe passo a utilizar dessa maneira também… Você define um listener para cada campo, igual colocou no exemplo? Se sim, será que não tem um jeito de definir por exemplo uma única vez para o formulario em que os campos estão e automaticamente o formulário ve isso?

Abraços[/quote]

Olha, cara, eu nunca precisei de uma solução desta maneira. Mas eu fiz um exemplo de um jeito de fazer isso. Ainda é primária a ideia, você pode aprimorá-la, se quiser, mas dê uma olhada no arquivo anexo, o qual contém um exemplo disto.

Me dá uma resposta, vamos pensar juntos sobre uma solução sobre isso! :smiley:

Se o nosso amigo estiver usando o Hibernate, fica simples a solução. Ele realmente deve usar o método saveOrUpdate() para realizar a inserção/atualização no banco de dados. Só deve tomar cuidado de, se o objeto existir, ele manter o ID na instância da classe, para o Hibernate não fazer INSERT, e sim UPDATE. Agora, se está trabalhando com JDBC, vejo a seguinte solução: Quando passar o objeto para a tela, se ele tiver um ID, mantenha a instância da classe com esse ID e verifique-o na hora de salvar o objeto:if (objeto.getID() !=0) { // atualiza } else { // salva }
Ou, se não quiser fazer esse tratamento, busque no banco o objeto com o ID especificado. Se existir, atualiza; caso contrário, salva. Eu prefiro fazer essa validação, visto que diminuo o número de acessos ao banco de dados pela minha aplicação.

Abraços!

Add um evento no seu jComponent (jTextField)

[code]textField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
// TODO
}

public void removeUpdate(DocumentEvent e) {  
    // TODO  
}  

public void insertUpdate(DocumentEvent e) {  
    // TODO   
}  

}); [/code]