Há algum problema neste CallaBleStatement?

Há algum problema nesta chamada a uma stored procedure do firebird?

public boolean reporEstoque() {
    try {
        cs = dbc.con.prepareCall("{call REPOR_ESTOQUE }");
        cs.execute();
    } catch(SQLException ex) {
        dbe.sqlErros(ex.getErrorCode(), ex);
        return false;
    }
    return true;
}

cs é CallableStatement

A procedure funciona, pois já a testei diretamente pelo BD. Mas quando a executo pelo meu código, aparentemente funciona, pois tenho um retorno true, mas nao está afetando o banco. Apenas quando a chamo duas vezes, ou seja, clico no botao que executa este método duas vezes, entao a procedure afeta o banco.

Nao tem nada a ver com o evento do botao. Posso dar os cliques com intervalo de um minuto. Que ainda sim funciona.

Ps. Ela nao tem input nem output values…

Alguém tem um palpite?

Troque cs.execute(); por cs.executeUpdate(); mesmo que não resolva, não use execute() ele é pra situações muito especificas onde uma consulta retorna mais de um ResultSet, quase nunca deve ser usado…

Se não for isso tente colocar um dbc.con.commit() após o executeUpdate();

public boolean reporEstoque() { try { cs = dbc.con.prepareCall("{call REPOR_ESTOQUE }"); cs.executeUpdate(); dbc.con.commit(); } catch(SQLException ex) { dbe.sqlErros(ex.getErrorCode(), ex); return false; } return true; }

continua com o mesmo comportamento.
Minha conexao já está funcionando no modo auto commit.

Veja, eu abro meu programa e chamo a procedure. Ela nao retorna erro.
É feita uma consulta no banco, e os dados que retornam ao meu programa, sao os dados que ‘foram’ atualizados pela procedure. Mas, entao, vou até meu banco e do um commit para conferir. E os dados sao os mesmos de antes da execucao da procedure. Ou seja, de algum lugar, meu programa pegou os dados atualizados, mas no meu banco, eles ainda sao os antigos entende?

Volto ao meu progrma e executo novamente a procedure, tb nao retorna erro nenhum. Dou um commit no banco outra vez, e entao, a procedure executou e os dados no banco atualizaram.

Jair, meu código que chamava aquele método reporEstoque() era assim:

    if( dbr.reporEstoque() ) {
        carregaCampos();
        lbStatus.setText( msg.reporOk() );
    }

reescrevi, e o deixei assim

    if( dbr.reporEstoque() && dbr.reporEstoque() ) {
        carregaCampos();
        lbStatus.setText( msg.reporOk() );
    }

Eu considero isso uma gambiarra. Mas foi a unica coisa que resolveu.

Tente colocar um commit dentro da procedure, se não der, é muito estranho!