Re: Resultset is closed

Ola,

Nunca utilize resultsets diretamente. Faça a classe de conexao com o SGBD criar objetos baseados na sua ResultSet, coloque estes numa lista e utilize estes na sua interface.

Dentre varios problemas, um grave eh que vc esta utilizando o mesmo resultset em todo o programa, como o fi_rsdes … isso vai te causar problemas mesmo. O correto eh voce criar o ResultSet localmente, nunca esquecendo de dar um close() apos pegar os dados.

Rafael

Caros colegas,

    Estou com o seguinte problema, tenho um combobox que é preenchido com um resultset de uma table extrangeira porém ao preencher o combo com os dados desta tabela e tentar navegar através da table principal esta me da a mensagem resultset is closed.
    Nesta classe possuem dois resultsets 1 da table mandataria e outro da table extrangeira que preenche o combobox. Executo primeiramente o result set da table extrangeira prenchendo o combobox e em seguida o da table mandataria, na primeira execução o processo é realizado e os campos da internalframe preenchidos porém com a mensagem que resultset is closed.

alguem pode me ajudar?

Parte do código


     public void pv_pcampo() {
     try {
        if(movr == "F") {
            fi_rsdad.previous();
        }
        else {
            fi_rsdad.next();
        }
        fi_txf01.setText(fi_rsdad.getString("CDC_COD"));
      	fi_txf03.setText(fi_rsdad.getString("CDC_DAT"));
      	fi_txf04.setText(fi_rsdad.getString("CDC_VAL"));
      	ncdcon = fi_rsdad.getInt("CDC_DES");
      	fi_cbcta.setSelectedItem(pv_retdes()); //comentando esta linha a func funciona
      	if(fi_rsdad.getInt("CDC_FEC") == 1)
      		fi_cbfec.setSelected(true);
      	else
      		fi_cbfec.setSelected(false);
      	
        if (fi_rsdad.isLast())
            ft_btn06.setEnabled(false);
        else
            ft_btn06.setEnabled(true);
        
        if (fi_rsdad.isFirst())
            ft_btn05.setEnabled(false);
        else
            ft_btn05.setEnabled(true);
        
     }
     catch(SQLException ex)
     { System.out.println(ex);}
     }

     public void pv_lcampo() {
     fi_txf01.setText("");
     fi_txf03.setText("");
     fi_txf04.setText("");
     
     }

     public void pv_atcampo() {
       cSql =  "SELECT CDC_COD, CDC_DES, CDC_DAT, CDC_VAL, CDC_FEC FROM CDC_CONT";
       fi_rsdad = fi_ConSql.Exec(cSql);
       }
 
     public int pv_retcod(){
     	int ccdcon = 0;
     	cSqlDes = "SELECT HSD_COD FROM HSD_DESP WHERE HSD_DES ='"+
		fi_cbcta.getSelectedItem()+"'";
     	fi_rsdes = fi_ConSql.Exec(cSqlDes);
        try {
        	fi_rsdes.next();
			ccdcon = fi_rsdes.getInt("HSD_COD");
			fi_rsdes.close();
        }
		catch (SQLException e) {
			e.printStackTrace();
		}
        return ccdcon;
     	}
     
 	public String pv_retdes(){
		String cdscon = null;
		try {
			cSqlDes = "SELECT HSD_DES FROM HSD_DESP WHERE HSD_COD ="+ncdcon;
			fi_rsdes = fi_ConSql.Exec(cSqlDes);
			fi_rsdes.next();
			cdscon = fi_rsdes.getString("HSD_DES");
			fi_rsdes.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return cdscon;
 	}

}

[quote=pcalcado]Ola,

Nunca utilize resultsets diretamente. Faça a classe de conexao com o SGBD criar objetos baseados na sua ResultSet, coloque estes numa lista e utilize estes na sua interface.[/quote]

não compreendi e para melhor entendimento envio a classe