Problema! [Driver ODBC para Microsoft Access] Não é possível abrir o banco de dados '|'

3 respostas
S

Pessoa estou com um problemasso, estou tentando cruzar 2 bases só que esta dando dando um erro que nunca vi e nao achei em lugar nenhum!

java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Não é possível abrir o banco de dados |. Ele pode não ser um banco de dados que o seu aplicativo reconheça ou o arquivo pode estar corrompido.

at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)

at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)

at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3110)

at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)

at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(JdbcOdbcStatement.java:288)

at testecruz.cruzador.cruzamento(cruzador.java:255)

at testecruz.Main.main(Main.java:34)

meu código é esse

public class cruzador {
    private int ocupado = 0;
    private Connection con;
    private Connection conn;
    private Statement st;
    private Statement stt;
    private Statement sttt;
    private ResultSet rs1;
    private ResultSet rs2;
    private ResultSet rs3;
    private String baseNova = "ddd11f";
    private String baseAntiga = "SP";
    private String versao = "2";
    public cruzador()
    {
        conexaoJDBC();
        cruzamento();
        closeCon();
    }
    public void cruzamento()
    {
            try {
                st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                stt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                sttt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
                String lado = "";
                int numero = 0;
                        String tipodoc = "";
                        String doc = "";
                        String cliente = "";
                        String tipo_end = "";
                        String end = "";
                        String num = "";
                        String complem = "";
                        String cep = "";
                        String bairro = "";
                        String cidade = "";
                        String uf = "";
                        String ddd = "";
                        String tel = "";
                        String doc2 = "";
                        String cliente2 = "";
                        String end2 = "";
                        String num2 = "";
                        String complem2 = "";
                        String bairro2 = "";
                        String cep2 = "";
                        String ddd2 = "";
                        String cidade2 = "";
                        String uf2 = "";
                rs1 = st.executeQuery("SELECT TIPODOC, DOC, CLIENTE, TIPO_END, ENDE, NUM, COMPLEM, CEP, BAIRRO, CIDADE, UF, DDD, TEL FROM "+baseNova+"");
                while(rs1.next())
                {
                    tipodoc = (String) rs1.getString("TIPODOC");
                    doc = (String) rs1.getString("DOC");
                    cliente = (String) rs1.getString("CLIENTE");
                    tipo_end = (String) rs1.getString("TIPO_END");
                    end = (String) rs1.getString("ENDE");
                    num = (String) rs1.getString("NUM");
                    complem = (String) rs1.getString("COMPLEM");
                    cep = (String) rs1.getString("CEP");
                    bairro = (String) rs1.getString("BAIRRO");
                    cidade = (String) rs1.getString("CIDADE");
                    uf = (String) rs1.getString("UF");
                    ddd = (String) rs1.getString("DDD");
                    tel = (String) rs1.getString("TEL");
                    if(tipo_end == null)
                            tipo_end = " ";
                    if(end == null)
                            end = " ";
                    if(bairro == null)
                            bairro = " ";
                    end = tipo_end+" "+end;
                    end = end.replace("'", "");
                    bairro = bairro.replace("'", "");
                        if(cliente == null)
                            cliente = "";
                        if(doc == null)
                            doc = "";
                        if(cep == null)
                            cep = "";
                        if(num == null)
                            num = "";
                        if(complem == null)
                            complem = "";
                    if(versao.compareTo("2") == 0)
                    {
                            numero = Integer.valueOf(num);
                            if(numero % 2 == 0)
                                lado = "P";
                            else
                                lado = "I";
                        rs2 = stt.executeQuery("SELECT ID, NOME, ENDERECO, NUMERO, COMPL, BAIRRO, CIDADE, UF, CEP, DDD FROM 011 WHERE TELEFONE='"+tel+"'");
                        if(rs2.next() == true)
                        {
                        while(rs2.next())
                        {
                            doc2 = (String) rs2.getString("ID");
                            cliente2 = (String) rs2.getString("NOME");
                            end2 = (String) rs2.getString("ENDERECO");
                            num2 = (String) rs2.getString("NUMERO");
                            complem2 = (String) rs2.getString("COMPL");
                            bairro2 = (String) rs2.getString("BAIRRO");
                            cep2 = (String) rs2.getString("CEP");
                            ddd2 = (String) rs2.getString("DDD");
                            cidade2 = (String) rs2.getString("CIDADE");
                            uf2 = (String) rs2.getString("UF");
                            end2 = end2.replace("'", "");
                            bairro2 = bairro2.replace("'", "");
                            if(cep2 == null)
                                cep2 = "";
                            if(num2 == null)
                                num2 = "";
                            if(complem2 == null)
                                complem2 = "";
                            if(doc.length() > 11)
                            {
                                          doc = doc.replaceFirst("000", "");
                            }
                            boolean diferente = false;
                            if(doc.compareToIgnoreCase(doc2) != 0)
                                diferente = true;
                            if(cliente.compareToIgnoreCase(cliente2) != 0)
                                diferente = true;
                            if(end.compareToIgnoreCase(end2) != 0)
                                diferente = true;
                            if(num.compareToIgnoreCase(num2) != 0)
                                diferente = true;
                            if(complem.compareToIgnoreCase(complem2) != 0)
                                diferente = true;
                            if(bairro.compareToIgnoreCase(bairro2) != 0)
                                diferente = true;
                            if(cep.compareToIgnoreCase(cep2) != 0)
                                diferente = true;
                            if(cidade.compareToIgnoreCase(cidade2) != 0)
                                diferente = true;
                            if(uf.compareToIgnoreCase(uf2) != 0)
                                diferente = true;
                            if(ddd.compareToIgnoreCase(ddd2) != 0)
                                diferente = true;
                            if(diferente == true)
                            {
                                sttt.executeUpdate("UPDATE 011 SET ID='"+doc+"', NOME='"+cliente+"', ENDERECO='"+end+"', NUMERO='"+num+"', COMPL='"+complem+"', BAIRRO='"+bairro+"', CEP='"+cep+"', DDD='"+ddd+"', CIDADE='"+cidade+"', UF='"+uf+"' WHERE TELEFONE='"+tel+"'");
                            }
                        }
                        }
                        else
                        {
                            if(cep2 == null)
                                cep2 = "";
                            if(num2 == null)
                                num2 = "";
                            if(complem2 == null)
                                complem2 = "";
                            if(doc.length() > 11)
                            {
                                          doc = doc.replaceFirst("000", "");
                            }
                            rs3 = stt.executeQuery("SELECT CLASSE, GRAU, NAC, CBO, SAL, EMAIL, DDDC, CEL1, SEXO, NASC, PROFISSAO, CEL2, ANO FROM 011 WHERE ID='"+doc+"'");
                            if(rs3.next() == true)
                            {
                                while(rs3.next())
                                {
                                    sttt.executeUpdate("INSERT INTO 011 (ID, NOME, ENDERECO, NUMERO, COMPL, BAIRRO, CIDADE, UF, CEP, DDD, TELEFONE, CLASSE, GRAU, NAC, CBO, SAL, EMAIL, DDDC, CEL1, SEXO, NASC, PROFISSAO, CEL2, PESSOA, ANO, RACA, X, OBS, LADO) VALUES ('"+doc+"', '"+cliente+"', '"+end+"', '"+num+"', '"+complem+"', '"+bairro+"', '"+cidade+"', '"+uf+"', '"+cep+"', '"+ddd+"', '"+tel+"', '"+rs3.getString("CLASSE")+"', "+rs3.getInt("GRAU")+", '"+rs3.getString("NAC")+"', '"+rs3.getString("CBO")+"', "+rs3.getInt("SAL")+", '"+rs3.getString("EMAIL")+"', '"+rs3.getString("DDDC")+"', '"+rs3.getString("CEL1")+"', '"+rs3.getString("SEXO")+"', '"+rs3.getString("NASC")+"', '"+rs3.getString("PROFISSAO")+"', '"+rs3.getString("CEL2")+"', '"+tipodoc+"', "+rs3.getInt("ANO")+", '', '', '', '"+lado+"')");
                                    //stt.executeUpdate("INSERT INTO 011 (ID, NOME, ENDERECO, NUMERO, COMPL, BAIRRO, CIDADE, UF, CEP, DDD, TELEFONE, PESSOA, ANO, RACA, X, OBS, LADO) VALUES ('"+doc+"', '"+cliente+"', '"+end+"', '"+num+"', '"+complem+"', '"+bairro+"', '"+cidade+"', '"+uf+"', '"+cep+"', '"+ddd+"', '"+tel+"', '"+tipodoc+"', 0, '', '', '', '"+lado+"')");
                                }
                            }
                            else
                            {
                                sttt.executeUpdate("INSERT INTO 011 (ID, NOME, ENDERECO, NUMERO, COMPL, BAIRRO, CIDADE, UF, CEP, DDD, TELEFONE, CLASSE, GRAU, NAC, CBO, SAL, EMAIL, DDDC, CEL1, SEXO, NASC, PROFISSAO, CEL2, PESSOA, ANO, RACA, X, OBS, LADO) VALUES ('"+doc+"', '"+cliente+"', '"+end+"', '"+num+"', '"+complem+"', '"+bairro+"', '"+cidade+"', '"+uf+"', '"+cep+"', '"+ddd+"', '"+tel+"', '', 0, '', '', 0, '', '', '', '', '', '', '', '"+tipodoc+"', 0, '', '', '', '"+lado+"')");
                            }
                                rs3.close();
                        }
                    }
                }
                sttt.close();
                stt.close();
                st.close();
            } catch (SQLException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
    }
    public void conexaoJDBC()
    {
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
             //Estabelecendo a conexão através do ODBC criado no Painel de Controle:
             String login = "Administrator";
             String senha = "kjdautf374%%**&^.as";
             //Estabelecendo a conexão através do ODBC criado no Painel de Controle:
             conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+baseAntiga+".mdb", login, senha);
             //Criando um objeto Statement para enviar requisições SQL para o Banco de Dados
             con = DriverManager.getConnection("jdbc:odbc:"+baseNova);
      } catch (Exception e) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, e);
      }
    }

    public void closeCon()
    {
        try {
            con.close();
            conn.close();
        } catch (SQLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
}

Valeu!

3 Respostas

M

A base antiga esta acessando diretamente o arquivo e a base nova é uma fonte de dados ODBC?

S

Mikhas isso mesmo, a antiga é .mdb e a nova é .dbf, a nova só uso para atualizar antiga, nao modifico ela…
:frowning:

M

Seu codigo esta muito dificil de entender, muito bagunçado.

Algumas perguntinhas:
1 - Existe alguma tabela nomeada “ddd11f”?
2 - Uma table “011”
3 - Ja tentou utilizar o caminho completo da base antiga (C:\pasta\arquivo)?

E duas dicas que vão melhorar muito seu codigo:
1 - Crie uma Factory de conexões. É bem mais correto do que atribuir as conexoes a attributos da classe.
Ou talvez até uam classe que encapsule todo o jdbc (que você precisa, pelo menos);

Algo do tipo:

MinhaClasseJdbc mcj = new MinhaClasseJdbc(url, usuario, senha);

ResultSet resultado = mcj.query("SELECT * FROM MASTER");

2 - Utilize o PreparedStatement para deixar seu codigo limpo;

PreparedStatement stmt = minhaConexao.prepareStatement("SELECT * FROM TABLE WHERE id = ?") ;

stmt.setInt(1, 123);

ResultSet result = stmt.executeQuery();
Criado 11 de agosto de 2009
Ultima resposta 11 de ago. de 2009
Respostas 3
Participantes 2