Problema com acesso BD Access utilizando Java / Win7

4 respostas
tidinas

Olá Amigos!

Preciso de vossa ajuda. Tenho um programa em java que acessa um banco de dados do Access e que exibe os dados em uma tela. Trata-se de um programa bem simples e o banco de dados é uma agenda com nomes e telefones.

Quando tento executar o programa da tela ele diz que ocorreu um erro pois não foi possível achar um tal driver na ODBC Driver Manager.

Tentei configuar o driver no ODBC mas ele dá erro e pede para reinstalar o driver. Meu Windows é o 7.

Como faço para reinstalar o driver do MS Access? Dizem que tem um tal de MDAC mas ele não funciona no 7…

Grato!

4 Respostas

nel

Boa noite. O ideal era que postasse o seu código ou pelo menos o stacktrace da sua exception. Outro detalhe, você apontou o driver do acess no classpath do seu projeto?
Abraços.

tidinas
nel:
Boa noite. O ideal era que postasse o seu código ou pelo menos o stacktrace da sua exception. Outro detalhe, você apontou o driver do acess no classpath do seu projeto? Abraços.
Olá amigo!

Tipo assim... COMO?!?!

hauhauhau

Foi mal valinho, mas não manjo quase nada de java. Essas coisas que você está me pedindo, eu não entendo muito bem... Segue a Screen com o erro:

[IMG]http://img94.imageshack.us/img94/2760/erroyyc.th.jpg[/IMG]

Abaixo, o código em Java:
package Utilitarios;
import java.sql.*;
import javax.swing.*;
public class Conexao {

        final private String driver="sun.jdbc.odbc.JdbcOdbcDriver"; //driver do banco
        final private String url="jdbc:odbc:Agenda"; //endereço para o banco - Alias
        final private String usuario = "";
        final private String senha = "";
        private Connection conexao; //Interface
        public Statement statement; //Responsavel pelo caminho do banco.
        public ResultSet resultset; //Armazena os resultados do sql.
        
        
     public boolean conecta(){ //somente conexão ao banco
         boolean result = true;
         try{ //sempre colocar o try catch para manipular banco
            Class.forName(driver);
            //conexao = DriverManager.getConnection(url,usuario,senha);
            conexao = DriverManager.getConnection(url,usuario,senha);
            JOptionPane.showMessageDialog(null,"Conectou","Conexão",1);
            
         }
         catch(ClassNotFoundException Driver){//java exige tratamento do caminho
            JOptionPane.showMessageDialog(null,"Driver não localizado " + Driver,
                    "Aviso do sistema",1);
            result = false; 
         }
         catch(SQLException Fonte){//java exige tratamento de sql
             JOptionPane.showMessageDialog(null,"Deu erro na conexão " +
                     "com a fonte de dados : " + Fonte,"Aviso do sistema",1);
             result = false;
         }
        return result;
     }   
     public void desconecta(){
        boolean result = true;
        try{
            conexao.close();
            JOptionPane.showMessageDialog(null,"Banco de dados fechado");
            result = false;
        }
        catch(SQLException fecha){
            JOptionPane.showMessageDialog(null,"Não foi possivel fechar o banco de dados: " + fecha);
            result = false;
        }
}
    public void executeSQL(String sql){
        try{
            statement = conexao.createStatement(
                            ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
            resultset = statement.executeQuery(sql);
        }
        catch(SQLException sqlex)
        {
            JOptionPane.showMessageDialog(null,"Não foi possivel executar o "+
                            "comando SQL " + sqlex + "comando SQL efetuado foi" +
                            sql ,"Aviso do sistema",1);
        }
}

}
/*
 * CadAgenda.java
 *
 * Created on 7 de Maio de 2009, 15:37
 */

package Cadastro;

/**
 *
 * @author  professor Jorge Maestre Carvalho
 */

import Utilitarios.Conexao;
import java.sql.SQLException;
import javax.swing.JOptionPane;

public class CadAgenda extends javax.swing.JFrame {
    
    //Criando o objeto para a conexão.
     Conexao cta_agenda;
   
   //Pega as posições de inicio e final de movimentação.
     int posicao = 0;

    /** Creates new form CadAgenda */
    public CadAgenda() {
        initComponents();
     /*Após todos os componentes criados,
     * iremos iremos inicializar o objeto cta_agenda.
     */         
        cta_agenda = new Conexao();
     
    //Efetuando a conexão com o banco de dados.
        cta_agenda.conecta();
    //Passando um comando SQL para ser executado.
        cta_agenda.executeSQL("SELECT * from fones"); 
        try{
            cta_agenda.resultset.first();
            mostrar();
        }
        catch(SQLException erro){
            JOptionPane.showMessageDialog(null,"Problemas com a minha tabela \n "+
            "ou não foi encontrados nenhum dados " + erro);
        }
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        txtNome = new javax.swing.JTextField();
        txtFone = new javax.swing.JTextField();
        cmdSair = new javax.swing.JButton();
        cmdPrimeiro = new javax.swing.JButton();
        cmdAnterior = new javax.swing.JButton();
        cmdProximo = new javax.swing.JButton();
        cmdUltimo = new javax.swing.JButton();
        jLabel3 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Agenda Telefonica Versão 1.0");
        setResizable(false);

        jLabel1.setFont(new java.awt.Font("Tahoma", 0, 18));
        jLabel1.setText("Nome :");
        jLabel1.setAutoscrolls(true);

        jLabel2.setFont(new java.awt.Font("Tahoma", 0, 18));
        jLabel2.setText("Fone :");
        jLabel2.setAutoscrolls(true);

        txtNome.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N

        txtFone.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N

        cmdSair.setIcon(new javax.swing.ImageIcon("E:\LPOO_Ant\Gifs\sair.GIF")); // NOI18N
        cmdSair.setToolTipText("Fecha o programa");
        cmdSair.setAutoscrolls(true);
        cmdSair.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdSairActionPerformed(evt);
            }
        });

        cmdPrimeiro.setText("<<");
        cmdPrimeiro.setToolTipText("Vai para o primeiro registro");
        cmdPrimeiro.setAutoscrolls(true);
        cmdPrimeiro.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdPrimeiroActionPerformed(evt);
            }
        });

        cmdAnterior.setText("<");
        cmdAnterior.setToolTipText("Registro anterior");
        cmdAnterior.setAutoscrolls(true);
        cmdAnterior.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdAnteriorActionPerformed(evt);
            }
        });

        cmdProximo.setText(">");
        cmdProximo.setToolTipText("Proximo registro");
        cmdProximo.setAutoscrolls(true);
        cmdProximo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdProximoActionPerformed(evt);
            }
        });

        cmdUltimo.setText(">>");
        cmdUltimo.setToolTipText("Último Registro");
        cmdUltimo.setAutoscrolls(true);
        cmdUltimo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdUltimoActionPerformed(evt);
            }
        });

        jLabel3.setFont(new java.awt.Font("Arial", 1, 24));
        jLabel3.setForeground(new java.awt.Color(0, 0, 255));
        jLabel3.setText("Angenda Telefônica De Contatos");

        jButton1.setIcon(new javax.swing.ImageIcon("E:\LPOO_Ant\Gifs\add.GIF")); // NOI18N
        jButton1.setToolTipText("Incluir nome");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(62, 62, 62)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
                    .add(cmdSair, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 64, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(layout.createSequentialGroup()
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                            .add(jLabel3)
                            .add(jLabel1)
                            .add(jLabel2)
                            .add(txtFone, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 169, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                            .add(txtNome, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 363, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                            .add(layout.createSequentialGroup()
                                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
                                    .add(org.jdesktop.layout.GroupLayout.LEADING, jButton1, 0, 0, Short.MAX_VALUE)
                                    .add(org.jdesktop.layout.GroupLayout.LEADING, cmdPrimeiro, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 68, Short.MAX_VALUE))
                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                                .add(cmdAnterior, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 65, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(23, 23, 23)
                                .add(cmdProximo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 63, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                                .add(cmdUltimo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 64, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
                        .add(23, 23, 23)))
                .addContainerGap(63, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(jLabel3)
                .add(21, 21, 21)
                .add(jLabel1)
                .add(15, 15, 15)
                .add(txtNome, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jLabel2)
                .add(14, 14, 14)
                .add(txtFone, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .add(29, 29, 29)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(cmdPrimeiro, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(cmdAnterior, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 56, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(cmdProximo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 55, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(cmdUltimo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 53, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .add(18, 18, 18)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(cmdSair, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 59, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(jButton1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 70, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(38, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void cmdUltimoActionPerformed(java.awt.event.ActionEvent evt) {                                          
// TODO adicione seu código de manipulação aqui:
         try{
            cta_agenda.resultset.last();
            mostrar();
        }
        catch(SQLException erro){
            JOptionPane.showMessageDialog(null,"Problemas com a minha tabela \n "+
            "ou não foi encontrados nenhum dados " + erro);
        }
    }                                         

    private void cmdPrimeiroActionPerformed(java.awt.event.ActionEvent evt) {                                            
// TODO adicione seu código de manipulação aqui:
         try{
            cta_agenda.resultset.first();
            mostrar();

        }
        catch(SQLException erro){
            JOptionPane.showMessageDialog(null,"Problemas com a minha tabela \n "+
            "ou não foi encontrados nenhum dados " + erro);
        }
    }                                           

    private void cmdAnteriorActionPerformed(java.awt.event.ActionEvent evt) {                                            
// TODO adicione seu código de manipulação aqui:
         try{
            cta_agenda.resultset.previous();
            posicao = 1;
            mostrar();

        }
        catch(SQLException erro){
            JOptionPane.showMessageDialog(null,"Problemas com a minha tabela \n "+
            "ou não foi encontrados nenhum dados " + "\n" + erro,"Aviso do sistema",1);
        }
    }                                           

    private void cmdProximoActionPerformed(java.awt.event.ActionEvent evt) {                                           
// TODO adicione seu código de manipulação aqui:
         try{
            cta_agenda.resultset.next();
            posicao = 2;
            mostrar();

        }
        catch(SQLException erro){
            JOptionPane.showMessageDialog(null,"Problemas com a minha tabela \n "+
            "ou não foi encontrados nenhum dados " + "\n" + erro,"Aviso do sistema",1);
        }
    }                                          

    private void cmdSairActionPerformed(java.awt.event.ActionEvent evt) {                                        
// TODO adicione seu código de manipulação aqui:
        System.exit(0);
    }                                       

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        txtNome.setText("");
        txtFone.setText("");
        txtNome.requestFocus();
    }                                        
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new CadAgenda().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify                     
    private javax.swing.JButton cmdAnterior;
    private javax.swing.JButton cmdPrimeiro;
    private javax.swing.JButton cmdProximo;
    private javax.swing.JButton cmdSair;
    private javax.swing.JButton cmdUltimo;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JTextField txtFone;
    private javax.swing.JTextField txtNome;
    // End of variables declaration                   

    public void mostrar(){
       try{
         txtNome.setText(cta_agenda.resultset.getString("nome"));
         txtFone.setText(cta_agenda.resultset.getString("fone"));
        }
        catch(SQLException erro){
            if (posicao == 1){
                JOptionPane.showMessageDialog(null,"Estamos no início do \n "+
            "Banco de dados" + "\n" +
            "Não temos mais dados","Aviso do sistema INÍCIO DO ARQUIVO",1);
            }
            else{
               JOptionPane.showMessageDialog(null,"Estamos no final \n "+
            "do Banco de dados" + "\n" + "Não temos mais dados",
            "Aviso do sistema FINAL DO ARQUIVO",1);
            }
            
        }
    }



}
davidbuzatto

Vc precisa configurar a fonte de dados ODBC.
Vc fez isso?

Agora uma dúvida. Vc precisa mesmo usar o Access???
Pq não usa um SGBD de verdade?

[]´s

nel

Bom dia.

Faço das minhas palavras as do colego acima, use um SGBD de verdade, quer um gratuito e bom? Porque não MySQL? É bem simples de lidar e muito bom.
Em relação a sua pergunta, o erro diz duas coisas:

1 - O nome Agenda que você especificou no programa ele nao encontra, então, reveja sua configuração e tenha certeza que está exatamente com este nome, ele é case sensitive (diferencia maíuscula de minuscula).

2 - Apontar o driver no classpath do seu projeto é simples. Clique com o botão direito no projeto -> properties -> classpath -> add jars
Ai é só adicionar o .jar do seu driver.

Pronto, faça isso, teste novamente e poste os resultados.
Abraços

Criado 14 de novembro de 2009
Ultima resposta 15 de nov. de 2009
Respostas 4
Participantes 3