Bom dia pessoal;
Estou desenvolvendo um sistema “java application” pelo Netbeans 6.9.1 for Windows.
Executando entro do IDE, funciona perfeitamente.
Teoricamente está pronto o sistema.
Nesta aplicação, em uma determinada janela, preciso ler várias tabelas em algum momento (aproximadamente 3 tabelas).
Só que ao executar fora do Netbeans, ao executar uma determinada rotina, recebo a informação “Cannot open any more tables”.
Como resolver este problema ?
Estou usando o access 2007 como BD, pois na empresa onde trabalho, não nos permite trabalho com outro.
Minha conexão:
package utilitarios;
import java.sql.*;
import javax.swing.*;
public class Conexao
{
final private String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
final private String DBQ = "Match.mdb";
final private String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+DBQ;
final private String usuario = "";
final private String senha = "";
public Connection conexao;
public Statement statement;
public ResultSet resultset;
public boolean conecta()
{
boolean result = true;
try
{
Class.forName(driver);
conexao = DriverManager.getConnection(url, usuario, senha);
} catch(ClassNotFoundException Driver)
{
JOptionPane.showMessageDialog(null,"Driver not found: "+Driver);
result = false;
} catch (SQLException Fonte)
{
JOptionPane.showMessageDialog(null,"Erro in conection with database: "+ Fonte);
result = false;
}
return result;
}
public void desconecta()
{
boolean result = true;
try
{
conexao.close();
// JOptionPane.showMessageDialog(null,"Banco fechado.");
} catch (SQLException erroSQL)
{
JOptionPane.showMessageDialog(null, "Could not close that pack database: "+erroSQL.getMessage());
result = false;
}
}
public void executeSQL(String sql)
{
try
{
statement = conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
// statement = conexao.createStatement();
resultset = statement.executeQuery(sql);
} catch(SQLException sqlex)
{
JOptionPane.showMessageDialog(null, "Could not execute sql command. " + sqlex+"\nThe sql command was: "+sql);
}
}
}
Abaixo tem uma parte da rotina onde provavelmente está causando a mensagem:
private void Busca_Refugio()
{
RefTotPos = 0;
RefTotVol = 0;
RefTotHy = 0;
int TotHy = 0;
int TotPr = 0;
int vlrProd = 0;
int vlrRefNes = 0;
DecimalFormat df = new DecimalFormat("0");
String sql = "";
try
{
sql = "SELECT SUM(VOLUME_PROGRAMADO), SUM(VOLUME_A_PRODUZIR - VOLUME_PRODUZIDO) FROM MC_PRODUZIR WHERE HIBRIDO IN " +
"(SELECT HIBRIDO FROM MCXREFUGIO WHERE REFUGIO='"+refugioEmUso+"')";
rs.executeSQL(sql);
rs.resultset.next();
TotHy = rs.resultset.getInt(1);
TotPr = rs.resultset.getInt(2);
rs.statement.executeUpdate("DROP TABLE TEMPDISTREF");
rs.statement.executeUpdate("SELECT ID_SITE, REFUGIO, ID_MM, (VOLUME - VOLUME_CONSUMIDO) as VOL, " +
"0 AS DISTRIBUIDO " +
"INTO TEMPDISTREF " +
"FROM REFUGIO_PRODUZIDO "+
"WHERE REFUGIO='"+refugioEmUso+"'");
sql = "UPDATE MC_PRODUZIR SET REFUGIO_1OP=0, REFUGIO_2OP=0, REFUGIO_3OP=0 " +
"WHERE HIBRIDO IN (SELECT HIBRIDO FROM MCXREFUGIO WHERE REFUGIO='"+refugioEmUso+"')";
rs.statement.executeUpdate(sql);
for (int indice=1; indice < 4; indice++)
{
PreparedStatement stms =
rs.conexao.prepareStatement("SELECT MC.*, MR.PRIORIDADE_OPERACAO "+
"FROM MC_PRODUZIR AS MC " +
"INNER JOIN MCXREFUGIO AS MR ON MR.HIBRIDO=MC.HIBRIDO "+
"WHERE MC.HIBRIDO IN " +
"(SELECT HIBRIDO FROM MCxREFUGIO WHERE REFUGIO='"+refugioEmUso+"') " +
"ORDER BY MR.PRIORIDADE_OPERACAO, MC.HIBRIDO");
ResultSet rss = stms.executeQuery();
while (rss.next())
{
String hy = rss.getString("Hibrido");
int idmm = rss.getInt("ID_MM");
int vap = rss.getInt("Volume_a_Produzir");
int vp = rss.getInt("Volume_Produzido");
int r1 = rss.getInt("Refugio_1op");
int r2 = rss.getInt("Refugio_2op");
int r3 = rss.getInt("Refugio_3op");
Double percRef = Pega_Perc_Refugio_Trait(hy);
vlrProd = vap - vp;
vlrProd += (int) Math.round((((double) vlrProd * MargemSeg)));
vlrRefNes = (int) Math.round((((double) vlrProd * percRef))+0.4d);
vlrRefNes -= (r1 + r2 + r3);
if (vlrRefNes > 0)
{
if (indice == 1)
vlrRefNes = Calcula_Opcao1(vlrProd, vlrRefNes, hy, idmm);
if (indice == 2)
vlrRefNes = Calcula_Opcao2(vlrProd, vlrRefNes, hy, idmm);
if (indice == 3)
vlrRefNes = Calcula_Opcao3(vlrProd, vlrRefNes, hy, idmm);
}
}
// stms.close();
}
} catch (SQLException e) {}
df = new DecimalFormat("#,##0");
lTotHy.setText(df.format(TotHy));
lTotProd.setText(df.format(TotPr));
lRefTot.setText(df.format(RefTotPos));
lVolRef.setText(df.format(RefTotVol));
lVolRefHy.setText(df.format(RefTotHy));
df = new DecimalFormat("0.0%");
Double vlr1 = new Double(TotPr).doubleValue();
Double vlr2 = new Double(TotHy).doubleValue();
Double res = vlr1 / vlr2;
lPercHy.setText(df.format(res));
vlr1 = new Double(RefTotPos).doubleValue();
vlr2 = new Double(TotPr).doubleValue();
res = vlr1 / vlr2;
lPercTot.setText(df.format(res));
vlr1 = new Double(RefTotVol).doubleValue();
vlr2 = new Double(RefTotHy).doubleValue();
res = vlr1 / vlr2;
lVolRefPerc.setText(df.format(res));
}
private int Calcula_Opcao1(int vlrProd, int vlrNes, String hibrido, int idmm)
{
int retorno = vlrNes;
Double percRef = Pega_Perc_Refugio_Trait(hibrido);
RefTotHy += vlrNes;
try
{
rs.executeSQL("SELECT * FROM TEMPDISTREF WHERE ID_MM="+idmm);
if (rs.resultset.next())
{
int dist = rs.resultset.getInt("Distribuido");
int vol = rs.resultset.getInt("Vol");
int vlr = vol - dist;
String sql = "UPDATE MC_PRODUZIR SET ";
String sql1 = "UPDATE TEMPDISTREF SET ";
if (vlrNes > vlr)
{
retorno = vlrNes - vlr;
dist += vlr;
RefTotPos += (int) Math.round(((double)vlr/percRef)+0.4d);
RefTotVol += vlr;
sql += "REFUGIO_1op = "+vlr+", ";
sql1 += "DISTRIBUIDO = "+ dist +" ";
} else
{
retorno = 0;
dist += vlrNes;
RefTotPos += vlrProd;
RefTotVol += vlrNes;
sql += "REFUGIO_1op = "+vlrNes+", ";
sql1 += "DISTRIBUIDO = " + dist +" ";
}
sql += "REFUGIO_2op=0, REFUGIO_3op=0 WHERE ID_SITE=1 AND HIBRIDO='"+hibrido+"' and id_mm="+idmm;
sql1 += "WHERE REFUGIO='" + refugioEmUso + "' AND ID_MM="+idmm;
rs.statement.executeUpdate(sql);
rs.statement.executeUpdate(sql1);
} else
{
String sql = "UPDATE MC_PRODUZIR SET ";
sql += "REFUGIO_1op=0, REFUGIO_2op=0, REFUGIO_3op=0 " +
"WHERE ID_SITE=1 AND HIBRIDO='"+hibrido+"' and id_mm="+idmm;
rs.statement.executeUpdate(sql);
}
} catch (SQLException e) {}
return retorno;
}
private int Calcula_Opcao2(int vlrProd, int vlrNes, String hibrido, int idmm)
{
int retorno = vlrNes;
int Nidmm = 0;
Double percRef = Pega_Perc_Refugio_Trait(hibrido);
RefTotHy += vlrNes;
try
{
rs.executeSQL("SELECT * FROM MILIMETROS WHERE ID_MM="+idmm);
rs.resultset.next();
Double tamanho = rs.resultset.getDouble("Tamanho");
String clas = rs.resultset.getString("Classificacao");
if (tamanho > 9)
{
rs.executeSQL("SELECT * FROM MILIMETROS WHERE tamanho="+(tamanho - 0.5)+" and classificacao='"+clas+"'");
if (rs.resultset.next())
{
Nidmm = rs.resultset.getInt("ID_MM");
rs.executeSQL("SELECT * FROM TEMPDISTREF WHERE ID_MM="+Nidmm);
if (rs.resultset.next())
{
int dist = rs.resultset.getInt("Distribuido");
int vol = rs.resultset.getInt("Vol");
int vlr = vol - dist;
String sql = "UPDATE MC_PRODUZIR SET ";
String sql1 = "UPDATE TEMPDISTREF SET ";
if (vlrNes > vlr)
{
retorno = vlrNes - vlr;
dist += vlr;
RefTotPos += (int) Math.round(((double)vlr/percRef)+0.4d);
RefTotVol += vlr;
sql += "REFUGIO_2op = "+vlr+" ";
sql1 += "DISTRIBUIDO = "+ dist +" ";
} else
{
retorno = 0;
dist += vlrNes;
RefTotPos += vlrProd;
RefTotVol += vlrNes;
sql += "REFUGIO_2op = "+vlrNes+" ";
sql1 += "DISTRIBUIDO = "+ dist +" ";
}
sql += "WHERE ID_SITE=1 AND HIBRIDO='"+hibrido+"' and id_mm="+idmm;
sql1 += "WHERE REFUGIO='" + refugioEmUso + "' AND ID_MM="+Nidmm;
rs.statement.executeUpdate(sql);
rs.statement.executeUpdate(sql1);
}
}
}
} catch (SQLException e) {}
return retorno;
}
private int Calcula_Opcao3(int vlrProd, int vlrNes, String hibrido, int idmm)
{
int retorno = vlrNes;
int Nidmm = 0;
Double percRef = Pega_Perc_Refugio_Trait(hibrido);
RefTotHy += vlrNes;
try
{
rs.executeSQL("SELECT * FROM MILIMETROS WHERE ID_MM="+idmm);
rs.resultset.next();
Double tamanho = rs.resultset.getDouble("Tamanho");
String clas = rs.resultset.getString("Classificacao");
if (tamanho > 9.5)
{
rs.executeSQL("SELECT * FROM MILIMETROS WHERE tamanho="+(tamanho - 1)+" and classificacao='"+clas+"'");
if (rs.resultset.next())
{
Nidmm = rs.resultset.getInt("ID_MM");
rs.executeSQL("SELECT * FROM TEMPDISTREF WHERE ID_MM="+Nidmm);
if (rs.resultset.next())
{
int dist = rs.resultset.getInt("Distribuido");
int vol = rs.resultset.getInt("Vol");
int vlr = vol - dist;
String sql = "UPDATE MC_PRODUZIR SET ";
String sql1 = "UPDATE TEMPDISTREF SET ";
if (vlrNes > vlr)
{
retorno = vlrNes - vlr;
dist += vlr;
RefTotPos += (int) Math.round(((double)vlr/percRef)+0.4d);
RefTotVol += vlr;
sql += "REFUGIO_3op = "+vlr+" ";
sql1 += "DISTRIBUIDO = "+ dist +" ";
} else
{
retorno = 0;
dist += vlrNes;
RefTotPos += vlrProd;
RefTotVol += vlrNes;
sql += "REFUGIO_3op = "+vlrNes+" ";
sql1 += "DISTRIBUIDO = "+ dist +" ";
}
sql += "WHERE ID_SITE=1 AND HIBRIDO='"+hibrido+"' and id_mm="+idmm;
sql1 += "WHERE REFUGIO='" + refugioEmUso + "' AND ID_MM="+Nidmm;
rs.statement.executeUpdate(sql);
rs.statement.executeUpdate(sql1);
}
}
}
} catch (SQLException e) {}
return retorno;
}
private Double Pega_Perc_Refugio_Trait(String material)
{
Double resultado = 0.0;
String trait="";
Boolean entrounro=false;
Boolean passounro=false;
for (int cont=0;cont<material.length();cont++)
{
if (passounro)
trait += material.substring(cont,cont+1);
else
if (!entrounro)
{
if (material.substring(cont,cont+1).equals("0") ||
material.substring(cont,cont+1).equals("1") ||
material.substring(cont,cont+1).equals("2") ||
material.substring(cont,cont+1).equals("3") ||
material.substring(cont,cont+1).equals("4") ||
material.substring(cont,cont+1).equals("5") ||
material.substring(cont,cont+1).equals("6") ||
material.substring(cont,cont+1).equals("7") ||
material.substring(cont,cont+1).equals("8") ||
material.substring(cont,cont+1).equals("9"))
entrounro = true;
} else
if (!material.substring(cont,cont+1).equals("0") &&
!material.substring(cont,cont+1).equals("1") &&
!material.substring(cont,cont+1).equals("2") &&
!material.substring(cont,cont+1).equals("3") &&
!material.substring(cont,cont+1).equals("4") &&
!material.substring(cont,cont+1).equals("5") &&
!material.substring(cont,cont+1).equals("6") &&
!material.substring(cont,cont+1).equals("7") &&
!material.substring(cont,cont+1).equals("8") &&
!material.substring(cont,cont+1).equals("9"))
{
trait = material.substring(cont,cont+1);
passounro = true;
}
}
if (!trait.equals(""))
{
rs.executeSQL("SELECT PERC_REFUGIO FROM PERC_REFUGIO WHERE TRAIT='"+trait+"'");
try
{
if (rs.resultset.next())
resultado = rs.resultset.getDouble("Perc_Refugio");
} catch (SQLException e)
{
JOptionPane.showMessageDialog(null, "Error in get % of Refuge.\nError: "+e);
}
}
return resultado;
}