Problemas com busca usando Netbeans 6.5 e Access 2007

3 respostas
Ewerton_Oliveira

galera, to tentando faze uma coisa simples.. uma consulta ao banco...
to usando o netbeans 6.5 com Access 2007..
a kestão é a seguinte... se eu passo a string como query="SELECT * FROM Cliente WHERE cdCliente = 10" , por exemplo, ele axa normal.. blzinha...
so q eu kero q a filtragem seja feita qdo for apertada uma tecla.. se eu passo o codigo direto, da forma q eu disse, ele axa...
agora se eu dexo query="SELECT * FROM Cliente WHERE cdCliente = "+codigo; dá erro de sintaxe no banco.. na maioria das vezes diz q é na clausula WHERE.....to puto da vida, pq nao consigo enxerga o erro nisso..
nunca tive problema como esse num outro programinha q eu fiz.. sempre passei o codigo como parametro e nao deu erro.. mas era otro netbeans e otro banco, o my sql.. agora é o access..
um amigo meu ta usando o sql server e deu certo esse codigo.. funfa certinho.. eu praticamente to usando o mesmo codigo, mudando apenas as variaveis e o nome dos metodos...
eu q vi funciona, mas apenas qdo eu coloco o valor do codigo dentro da string pra armazena na query... de qq outro jeito, da erro.. ja colokei espaço antes do =, depois, aspas simples pra ca e pra la.. apesar de ser intero, como nao ta dando certo, tentei isso tb...
mas enfim, nada deu certo..
to começando a axa q é o proprio access q nao aceita....
=/
se alguem tive alguma ideia do q ta acontecendo.. me fala.. abaixo ta o codigo...

public void filtrarCliente(){

//esse metodo pega os valores digitados num dos campos.. se codigo for vazio, ele pega o nome...mas o código é oq importa agora
            String tabCodigo= text_tabCodigo.getText();
            String tabNome=text_tabNome.getText();
           // String tabApelido=text_tabApelido.getText().toUpperCase();
            

            String query="SELECT * FROM Cliente WHERE  ";
                      
         
            if(!tabCodigo.equals(""))
            {
             
                query+="cdCliente = "+tabCodigo;
            }
            else{
                if(!tabNome.equals(""))
                {
                    query+=" Nome LIKE = '"+tabNome+"'";
                }
            }


            //alguem ve algum erro de sintaxe??
            filtragem(query);
    }


public void filtragem(String query){

//aki é so a consulta normal ao banco.. aki é sem problemas.. 
        try{

                 conn.Conecta();

                 int qtd=tabelaPadrao.getColumnCount();

                  while(qtd!=0){

                      tabelaPadrao.removeRow(0);
                      qtd=tabelaPadrao.getRowCount();

                    
                 }

                 res=conn.Consulta(query);

                 while(res.next()){

                     int cod=res.getInt("cdCliente");
                     String tabStatus=res.getString("Status");
                     String tabNome=res.getString("Nome");
                     String tabApelido=res.getString("Apelido");
                     String tabRua=res.getString("Rua");
                     String tabNumero=res.getString("Numero");
                     String tabCep=res.getString("Cep");
                     String tabBairro=res.getString("Bairro");
                     String tabCidade=res.getString("Cidade");
                     String tabEstado=res.getString("Estado");
                     String tabTelefone=res.getString("Telefone");
                     String tabCelular=res.getString("Celular");
                     String tabCpf=res.getString("CPF");
                     String tabCnpj=res.getString("CNPJ");
                     String tabDtNascimento=res.getString("Data de Nascimento");
                     String tabDtCadastro=res.getString("Data de Cadastro");
                     String tabTipoPessoa=res.getString("Tipo Pessoa");
                     
                     String tabCodigo=""+cod;

                     String linha[]={tabCodigo,tabStatus,tabNome,tabApelido,tabRua+
                             " "+tabNumero,tabCep,tabBairro,tabCidade,
                             tabEstado,tabTelefone,tabCelular,tabTipoPessoa,
                             tabCpf,tabCnpj,tabDtNascimento,tabDtCadastro
                                     };
                     tabelaPadrao.addRow(linha);


                 }

                 conn.Fecha();


            }catch (SQLException ex) {
                Logger.getLogger(TabelaCliente.class.getName()).log(Level.SEVERE, null, ex);
                JOptionPane.showMessageDialog(this,"Erro Comando SQL "+ex.getMessage());
             }



    }


//aki eu xamo o metodo de filtragem sempre q alguma tecla é digitada...mas aki tb nao tem problema aparentemente...
private void text_tabCodigoKeyTyped(java.awt.event.KeyEvent evt) {
               filtrarCliente();
    }

se alguem nao entende alguma coisa.. me fala ae..
vlw galera...

3 Respostas

E
  1. Imprimir o resultado da query, ou seja, depois da filtragem, coloque a sql motada no seu bd e mande rodar para ver o resultado e assim vc vai descobrir qual o erro na sintaxe.

  2. Vc pode usar a interface PreparedStatement para evitar concatenar string direto com a sql.

  3. ou tbm poderia tentar fazer algo assim usando a classe StringBuffer:

StringBuffer query= new StringBuffer("SELECT * FROM Cliente WHERE ");
		if(!tabCodigo.equals("")){
			query.append("cdCliente = ");
			query.append(tabCodigo);
		}
		 else{ 
             if(!tabNome.equals(""))  
             {  
            	 query.append(" Nome LIKE '%");
            	 query.append(tabNome);
            	 query.append("'%");
             }  
         }
L
String query="SELECT * FROM Cliente WHERE  ";  
                         
             if(!tabCodigo.equals(""))  
             {  
                
                 query+="cdCliente = "+tabCodigo;  
             }  
             else{  
                 if(!tabNome.equals(""))  
                 {  
                     query+=" Nome LIKE = '"+tabNome+"'";  
                 }  
             }

e se tabCodigo e tabNome estiverem como “” (String vazia)? A String para consulta seria "SELECT * FROM Cliente WHERE " o que deveria ocorrer erro. Faça um debug e verifique…

int qtd=tabelaPadrao.getColumnCount();  
   
                   while(qtd!=0){  
   
                       tabelaPadrao.removeRow(0);  
                       qtd=tabelaPadrao.getRowCount();  
   
                       
                  }

Neste trecho primeiro qtd obtem a quantidade de colunas e depois dentro do loop a quantidade de linhas… está correto?

Ewerton_Oliveira

po galera… vlw msm pela resposta rapida…
luizlcfc vlw pela dica cara… oq vc falou sobre no primero trecho pega a qtde de colunas e depois a de linhas tava certo…
eu trokei as bolas aki… mas msm eu tendo feito errado isso, nao afetou em nada… axo q por causa do loop msm… o indice a ser apagado por ele era fixo, entao ele fazia de boa msm errado…
ja trokei…

oq tava errado galera era o seguinte: o metodo de filtragem tava sendo xamado qdo uma tecla era pressionada, mas parece q nao tava dando tempo de pegar o valor digitado…
eu trokei o metodo de keytiped pra keyreleased e funciono pro campo codigo…
agora vo faze pros otros campos…

vlw msm galera!!
abraços

Criado 30 de março de 2009
Ultima resposta 30 de mar. de 2009
Respostas 3
Participantes 3