Acessar 2 tabelas de um Banco Acess com Resultset()

9 respostas
ThiagoSOT

Eu não tenho muita experiência e gostaria de saber onde está o erro deste código, já que estou a dias olhando e não consigo encontrar :?:

private void pesqNome()

{

// Declaração das variáveis que vão ser utilizadas para pegar os dados

String tels,qds,codvs, qts,cods,nomc;

int teli,qdi,codvi,qti,codi;
try
    {
        nomc = tfNome.getText();
        System.out.println(nomc);
      comando = "SELECT * FROM CLIENTE, VENDA WHERE (CLIENTE.COD_CLIENTE = VENDA.COD_CLIENTE AND CLIENTE.NOM_CLIENTE = '" + nomc + "')";
                 
       // linha do erro Resultset()
       ResultSet rs1 = ac1.stm.executeQuery(comando);
       System.out.println(nomc);
        while (rs1.next())
        {
           int i;
           i = rs1.getInt("CLIENTE.COD_CLIENTE");
           System.out.println(i);
            codi = rs1.getInt("COD_CLIENTE");
            cods = String.valueOf(codi);
            tfCodigo.setText(cods);
            tfNome.setText(rs1.getString("cl.NOM_CLIENTE"));
            tfEndereco.setText(rs1.getString("cl.END_CLIENTE"));
            teli = rs1.getInt("cl.TEL_CLIENTE");
            tels = String.valueOf(teli);
            tfTelefone.setText(tels);
            qdi = rs1.getInt("cl.QUANTDEV_CLIENTE");
            qds = String.valueOf(qdi);
            tfQuantiaDev.setText(qds);
            codvi = rs1.getInt("vd.COD_VENDA");
            codvs = String.valueOf(codvi);
            tfCodigoVenda.setText(codvs);
            qti = rs1.getInt("vd.QUANT_VENDA");
            qts = String.valueOf(qti);
            tfQuantidade.setText(qts);
            Date h2 = rs1.getDate("vd.DATA_VENDA");
            h3 = String.valueOf(h2);
            tfDataCompra.setText(h3);
            
        }
    }
    catch (SQLException e)
    {
    System.out.println(e.getMessage());
    }

}

OBS: 1- Nas outras pesquisas que eu fiz com o resultset funcionaram, a única diferença é que estou juntando as tabelas.
2- Já testei o comando select diretamente no banco e também funciona.
3 - O Acess não aceita Inner Join(já testado)
4- Estou usando o Netbeans 6.0.1 (Não sei se tem muito a ver)

Código do Erro

Exception in thread AWT-EventQueue-0 java.lang.NullPointerException

at ConsClient.pesqNome(ConsClient.java:224)

at ConsClient.access$100(ConsClient.java: 8 )

at ConsClient$2.actionPerformed(ConsClient.java:101)

O restante do erro são classes internas do java

Desde já agradeço atenção de todos

9 Respostas

ThiagoSOT

Foi mal sou novo e só depois vi o lance de configuração do código :frowning:

Anime

Vou ajudá-lo,por favor não leve a mal :stuck_out_tongue:

private void pesqNome() {
        // Declaração das variáveis que vão ser utilizadas para pegar os dados
        String tels,qds,codvs, qts,cods,nomc;
        int teli,qdi,codvi,qti,codi;
        
        try {
            nomc = tfNome.getText();
            System.out.println(nomc);
            comando = "SELECT * FROM CLIENTE, VENDA WHERE (CLIENTE.COD_CLIENTE = VENDA.COD_CLIENTE AND CLIENTE.NOM_CLIENTE = '" + nomc + "')";
            
// linha do erro Resultset()
            ResultSet rs1 = ac1.stm.executeQuery(comando);
            System.out.println(nomc);
            while (rs1.next()) {
                int i;
                i = rs1.getInt("CLIENTE.COD_CLIENTE");
                System.out.println(i);
                codi = rs1.getInt("COD_CLIENTE");
                cods = String.valueOf(codi);
                tfCodigo.setText(cods);
                tfNome.setText(rs1.getString("cl.NOM_CLIENTE"));
                tfEndereco.setText(rs1.getString("cl.END_CLIENTE"));
                teli = rs1.getInt("cl.TEL_CLIENTE");
                tels = String.valueOf(teli);
                tfTelefone.setText(tels);
                qdi = rs1.getInt("cl.QUANTDEV_CLIENTE");
                qds = String.valueOf(qdi);
                tfQuantiaDev.setText(qds);
                codvi = rs1.getInt("vd.COD_VENDA");
                codvs = String.valueOf(codvi);
                tfCodigoVenda.setText(codvs);
                qti = rs1.getInt("vd.QUANT_VENDA");
                qts = String.valueOf(qti);
                tfQuantidade.setText(qts);
                Date h2 = rs1.getDate("vd.DATA_VENDA");
                h3 = String.valueOf(h2);
                tfDataCompra.setText(h3);
                
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        
        
    }

Tive um problema parecido com o access,resolvi acessando as tabelas separadamente + ou - assim:

conecta_venda=new conexao();
        conecta_venda.conecta();
        
        conecta_parcela=new conexao();
        conecta_parcela.conecta();
        
        conecta_venda.executaSQL("select * from TB_vendas order by "+ordenacao);
        conecta_parcela.executaSQL("select * from TB_recebe order by "+oi);

Não sei se é correto mas tentei de várias formas,a única que deu certo foi essa…

Zeed01

Boa noite galera,

É nessa linha que ta dando nullexception ?

tfEndereco.setText(rs1.getString(“cl.END_CLIENTE”));

o que é esse cl.end_cliente ?

[]s

ThiagoSOT

Primeiramente Obrigado por responderem :lol:

Em relação ao Zeed01 o erro esta no resultset() da linha 14 e essa linha que você se referiu eu tinha feito várias alterações no SQL e me esqueci de mudar(cl era o "apelido" da Tabela Cliente) mas não esta dando interferência pois na linha 19 (linha do Sistem.out.println dentro de rs.next)não obtive resposta.

Quanto ao Anime não iria te levar a mal VLW! :D
Fiz as alterações recomendadas mudando para o código listado abaixo porém o erro continua sendo o mesmo em cima da linha do primeiro resultset()

private void pesqNome()
{
        String tels,qds,codvs, qts,cods,nomc;
        int teli,qdi,codvi,qti,codi;
                        
        try
        {
            nomc = tfNome.getText();
            System.out.println(nomc);
            
           comando1="SELECT * FROM CLIENTE WHERE (NOM_CLIENTE = '" + nomc + "')";
                     
          System.out.println(comando1);
          ResultSet rs = ac.stm.executeQuery(comando1);
          System.out.println(nomc);
           while (rs.next())
            {
               codi = rs.getInt("COD_CLIENTE");
               System.out.println(codi);
                cods = String.valueOf(codi);
                tfCodigo.setText(cods);
                tfEndereco.setText(rs.getString("END_CLIENTE"));
                teli = rs.getInt("TEL_CLIENTE");
                tels = String.valueOf(teli);
                tfTelefone.setText(tels);
                qdi = rs.getInt("QUANTDEV_CLIENTE");
                qds = String.valueOf(qdi);
                tfQuantiaDev.setText(qds);
                                
            }
        }
        catch (SQLException e)
        {
        System.out.println(e.getMessage());
        }
        try
        {
            cods = tfCodigo.getText();
            Integer.parseInt(cods);
            comando2="SELECT * FROM VENDA WHERE (COD_CLIENTE =" + cods + ")";
                        
          System.out.println(comando2);
          ResultSet rs = ac.stm.executeQuery(comando2);
         
            while (rs.next())
            {
                codvi = rs.getInt("COD_VENDA");
                codvs = String.valueOf(codvi);
                tfCodigoVenda.setText(codvs);
                qti = rs.getInt("QUANT_VENDA");
                qts = String.valueOf(qti);
                tfQuantidade.setText(qts);
                Date h2 = rs.getDate("DATA_VENDA");
                h3 = String.valueOf(h2);
                tfDataCompra.setText(h3);
                
            }
        }
        catch (SQLException e)
        {
        System.out.println(e.getMessage());
        }
     
     
}
Anime

Oi Thiago,

Sou menina rsrs :wink:

Acho que vc deve declarar e já inicializar as variáveis:

EX:

String ordenacao="id_venda",oi="cod";
comando1="SELECT * FROM CLIENTE WHERE (NOM_CLIENTE = '" + nomc + "')";  //vc pode tirar o = e as aspas,ficaria assim:

                comando1=("SELECT * FROM CLIENTE ORDER BY "+nomc);//faça o mesmo com o outro select

obs:não testei,só estou te passando como eu fiz...

Zeed01

Boa noite galera !

O erro esta nessa linha: ResultSet rs = ac.stm.executeQuery(comando1); ?

O erro que esta dando é esse: Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException ?

Onde esta a declaração de “ac” e “stm” ?

[]s

ThiagoSOT

Olá a Todos ! :lol:

Anime me explique melhor que eu não entendi.
1- A ordenação não precisa ser pelo nome Coluna ex: NOM_CLIENTE ?
2 - Não entendi nada o primeiro trecho do código, em que eu precisaria usar?

e também testei colocando dos dois jeitos
O order by com a Variável e com o nome do campo deram o mesmo erro anterior, não adicionei o primeiro trecho do código pois não entendi??

______________________________________________________________________________

E Zedd01

Sim o erro é esse e nessa linha mesmo.
No import dessa mesma classe postada (ConsClient.java) eu utilizo

public Statement stm;
Acesso ac = new Acesso();

e a classe Acesso.java está aqui

import java.sql.*;
import javax.swing.*;
import java.util.*;

public class Acesso // faz o acesso ao Banco de Dados
{ 
  final static private String DRV = "sun.jdbc.odbc.JdbcOdbcDriver"; 
  final static private String URL = "jdbc:odbc:SistemaBombom"; 

  public Connection con; 
  public Statement stm;
  
  /** + conecta(): boolean =================================================================
   * ------------------------------------
   * Estabelece uma conexão com o banco de dados devolvendo
   * uma resposta lógica que indica se o Acesso foi estabelecido
   * ou não
   */
  public boolean conecta()
  { boolean retorno = true;
    try
    { Class.forName(DRV);
      con = DriverManager.getConnection(URL,"","");
      stm = con.createStatement();
    }
    catch(java.lang.ClassNotFoundException er1)
    { System.out.println(er1.getMessage());
      retorno = false;
    }
    catch(SQLException er2)
    { System.out.println(er2.getMessage());
      retorno = false;
    }
    return retorno;
  }

Os outros métodos de acesso não são utilisados nesta classe

Anime

Oi,acho que vc não entendeu,então vai por aq mesmo…se vc quiser posso te mandar minha classe por email,ai vc tira suas duvidas… :roll:

ThiagoSOT

VLW GALERA PELA AJUDA CONSEGUIIIIIIIIIIIII!!!!!!!!!!!!!!!!!! :P :P :P :P

private void pesqNome()
{



/* Inclui esta Parte nas duas partes pois nos outros que deram certo estava porém neste eu conectava mas não utilizava o ac.veExiste método de acesso que servia para saber se existia pelo menos um registro, para saber se iria incluir um novo ou alterar mas pelo jeito na hora do select ele estava criticando por não ter certeza se tinha um registro.*/
  
 if(ac.conecta())    
 {     
        String cods, qts, tels,qds,codvs,nomc;
        int codi, qti, teli,qdi,codvi;
        nomc = tfNome.getText();
        altera = (ac.veExiste("CLIENTE where (NOM_CLIENTE ='" + nomc + "')") > 0);
        tfCodigoVenda.setEnabled(((altera) ? false : true));
        if(altera)
          {

// Fim da Modificação
         


          try
          {
           comando1="SELECT * FROM CLIENTE WHERE NOM_CLIENTE = '" + nomc + "'";
           ResultSet rs = ac.stm.executeQuery(comando1);
           while (rs.next())
           {
                codi = rs.getInt("COD_CLIENTE");
                cods = String.valueOf(codi);
                tfCodigo.setText(cods);
                tfEndereco.setText(rs.getString("END_CLIENTE"));
                teli = rs.getInt("TEL_CLIENTE");
                tels = String.valueOf(teli);
                tfTelefone.setText(tels);
                qdi = rs.getInt("QUANTDEV_CLIENTE");
                qds = String.valueOf(qdi);
                tfQuantiaDev.setText(qds);
                           
            }
        }
        catch (SQLException e)
        {
        System.out.println(e.getMessage());
        }
        if(ac.conecta())    
        {     
        cods = tfCodigo.getText();
        Integer.parseInt(cods);    
        altera = (ac.veExiste("VENDA where (COD_CLIENTE =" + cods + ")") > 0);
        tfCodigoVenda.setEnabled(((altera) ? false : true));
        if(altera)
          {
          try
          {  
            comando2=("SELECT * FROM VENDA WHERE COD_CLIENTE =" + cods);
            ResultSet rs = ac.stm.executeQuery(comando2);
        
            while (rs.next())
            {
                codvi = rs.getInt("COD_VENDA");
                codvs = String.valueOf(codvi);
                tfCodigoVenda.setText(codvs);
                qti = rs.getInt("QUANT_VENDA");
                qts = String.valueOf(qti);
                tfQuantidade.setText(qts);
                Date h2 = rs.getDate("DATA_VENDA");
                h3 = String.valueOf(h2);
                tfDataCompra.setText(h3);
                
            }
        }
        catch (SQLException e)
        {
        System.out.println(e.getMessage());
        }
     
        }
       }
      }
   }
}

Eu sei que tem jeito de colocar o tópico como resolvido, porém não sei se alguem peder dar mais essa ajuda. VLW GALERA POR ME AJUDAR
:lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:

Criado 15 de setembro de 2010
Ultima resposta 17 de set. de 2010
Respostas 9
Participantes 3