Consulta no SQL Server 2005 apresentando erro

11 respostas
N
Incorrect syntax near the keyword 'INNER' Essa é a mensagem que apresenta quando é feita a consulta no banco de dados. tô precisando saber o por que disso. alguem ai pode ajudar?Já tentei achar o problema, mas ainda não achei.
public void consulta_sequencia() throws SQLException{
        conexao conecta=new conexao();
        conecta.abre();   //método para abrir conexão com o banco de dados
        String query = "SELECT Cli_For.Codigo, Cli_For.Fisica_Juridica, Cli_For.Nome, Cli_For.Fantasia, Cli_For.Endereco, Cli_For.Bairro, Cli_For.Cidade, Cli_For.Estado, Cli_For.CEP, Cli_For.CNPJ, Cli_For.Inscricao, Cli_For.Inscricao_Municipal, Cli_For.Fone_1, Cli_For.Fone_2, Cli_For.email, Produtos.Codigo,Produtos.Nome, Produtos.Pesquisa_1, Saidas_Series.Serie,Saidas.Filial, Saidas.Data, Saidas.Vendedor1, Saidas.NFe, Saidas_Produtos.Preco_Final,Saidas_Produtos.Linha"
                + "FROM ((Saidas_Produtos INNER JOIN Produtos ON Saidas_Produtos.Codigo = Produtos.Codigo) INNER JOIN (Saidas INNER JOIN  Cli_For ON Saidas.Cliente = Cli_For.Codigo) ON (Saidas_Produtos.Filial = Saidas.Filial) AND (Saidas_Produtos.Sequencia = Saidas.Sequencia)) INNER JOIN Saidas_Series ON (Saidas_Series.Filial = Saidas_Produtos.Filial) AND (Saidas_Produtos.Linha = Saidas_Series.Linha) AND (Saidas_Produtos.Sequencia = Saidas_Series.Sequencia)"
                + " WHERE Saidas.Sequencia='"+this.getSequencia()+"' AND Saidas_Series.Sequencia='"+this.getSequencia()+"' AND Saidas.Filial='"+this.getNum_filial()+"' AND Saidas_Produtos.Filial='"+this.getNum_filial()+"' AND Saidas_Produtos.Linha='"+this.getLinha()+"' AND Saidas_Series.Linha='"+this.getLinha()+"'";
        conecta.consulta(query);
        conecta.resultado.next();
        //dados do cliente que vem do banco  
        
        this.setCodigo_cliente(conecta.resultado.getString("Cli_For.Codigo"));
        this.setNome_cliente(conecta.resultado.getString("Cli_For.Nome"));
        this.setCnpj_cliente(conecta.resultado.getString("Cli_For.CNPJ"));
        this.setInscricao_cliente(conecta.resultado.getString("Cli_For.Inscricao"));
              ............
Fiz essa mesma consulta diretamente no Management Studio do sql (claro que lá coloquei numero d sequencia, filial e linha do produto na sequencia) e me retornou o que desejo. Mas no programa aparece a mensagem. Me ajudem ai... :lol:

11 Respostas

drsmachado

O erro não é diretamente no INNER mas no meio da String.
Esse erro é comum para quem ignora o uso de um objeto mais rápido, leve, descomplicado e útil, como StringBuffer e StringBuilder

Saidas_Produtos.Linha"   
                + "FROM ((Saidas_Produtos INNER JOIN

é o mesmo que

Saidas_Produtos.LinhaFROM ((Saidas_Produtos INNER JOIN

Percebe como não há separação entre Linha e From?

drsmachado

Pode ser mais longo, mas veja como é mais visual e fácil de encontrar um erro, caso haja, na String que compõe a query, caso utilize StringBuffer

StringBuffer query = new StrringBuffer();
query.append("SELECT Cli_For.Codigo, ");
query.append("Cli_For.Fisica_Juridica, ");
query.append("Cli_For.Nome, ");
query.append("Cli_For.Fantasia, ");
query.append("Cli_For.Endereco, ");
query.append("Cli_For.Bairro, ");
query.append("Cli_For.Cidade, ");
query.append("Cli_For.Estado, ");
query.append("Cli_For.CEP, ");
query.append("Cli_For.CNPJ, ");
query.append("Cli_For.Inscricao, ");
query.append("Cli_For.Inscricao_Municipal, ");
query.append("Cli_For.Fone_1, ");
query.append("Cli_For.Fone_2, ");
query.append("Cli_For.email, ");
query.append("Produtos.Codigo, ");
query.append("Produtos.Nome, ");
query.append("Produtos.Pesquisa_1, ");
query.append("Saidas_Series.Serie, ");
query.append("Saidas.Filial, ");
query.append("Saidas.Data, ");
query.append("Saidas.Vendedor1, ");
query.append("Saidas.NFe, ");
query.append("Saidas_Produtos.Preco_Final, ");
query.append("Saidas_Produtos.Linha ");
query.append("FROM ");
query.append("((Saidas_Produtos ");
query.append("INNER JOIN ");
query.append("Produtos ");
query.append("ON ");
query.append("Saidas_Produtos.Codigo ");
query.append("= ");
query.append("Produtos.Codigo) ");
query.append("INNER JOIN ");
query.append("(Saidas INNER JOIN ");
query.append("Cli_For ");
query.append("ON ");
query.append("Saidas.Cliente ");
query.append("= ");
query.append("Cli_For.Codigo) ");
query.append("ON ");
query.append("(Saidas_Produtos.Filial ");
query.append("= ");
query.append("Saidas.Filial) ");
query.append("AND ");
query.append("(Saidas_Produtos.Sequencia ");
query.append("= ");
query.append("Saidas.Sequencia)) ");
query.append("INNER JOIN ");
query.append("Saidas_Series ");
query.append("ON ");
query.append("(Saidas_Series.Filial ");
query.append("= ");
query.append("Saidas_Produtos.Filial) ");
query.append("AND ");
query.append("(Saidas_Produtos.Linha ");
query.append("= ");
query.append("Saidas_Series.Linha) ");
query.append("AND ");
query.append("(Saidas_Produtos.Sequencia ");
query.append("= ");
query.append("Saidas_Series.Sequencia) ");
query.append("WHERE ");
query.append("Saidas.Sequencia ");
query.append("= ");
query.append("? ");
query.append("AND ");
query.append("Saidas_Series.Sequencia ");
query.append("= ");
query.append("? ");
query.append("AND ");
query.append("Saidas.Filial ");
query.append("= ");
query.append("? ");
query.append("AND ");
query.append("Saidas_Produtos.Filial ");
query.append("= ");
query.append("? ");
query.append("AND ");
query.append("Saidas_Produtos.Linha ");
query.append("= ");
query.append("? ");
query.append("AND ");
query.append("Saidas_Series.Linha ");
query.append("= ");
query.append("? ");

E no lugar de Statement, Prepared Statement

PreparedStatement ps = con.prepareStatement(query.toString());
ps.setInt(1, this.getSequencia());

E assim por diante

N

É pelo menos não apresenta o mesmo erro.Valeu. Vou aqui denovo apanhar. Você diz a String query=…?

drsmachado

Ah, e o [Ajuda] no título não muda em nada.
Se não precisasse de ajuda, não criaria um tópico.

N

Caramba, calma ai foi só um [AJUDA]. Mas muito obrigado

ViniGodoy

Na verdade, ele está certo. Não coloque [Ajuda], [Dúvida] ou outra tag inútil no tópico, pois se todos fizerem, vai ficar difícil de enxergar as coisas importantes como [Resolvido] ou [SQL Server 2005].

N

Desculpas pela bagunça. Muito obrigado mesmo por me ajudarem. As vezes precisamos de uns coques na cabeça pra aprender as minimas coisas.

ViniGodoy

Na verdade, o ideal é usar StringBuilder no lugar de StringBuffer, pois não é sincronizado.

Mas nesse caso eu usaria concatenação de Strings mesmo, como na String abaixo:

String query = "SELECT" + " Cli_For.Codigo," + " Cli_For.Fisica_Juridica," + " Cli_For.Nome," + " Cli_For.Fantasia," + " Cli_For.Endereco," + " Cli_For.Bairro," + " Cli_For.Cidade," + " Cli_For.Estado," + " Cli_For.CEP," + " Cli_For.CNPJ," + " Cli_For.Inscricao," + " Cli_For.Inscricao_Municipal," + " Cli_For.Fone_1," + " Cli_For.Fone_2," + " Cli_For.email," + " Produtos.Codigo,Produtos.Nome," + " Produtos.Pesquisa_1," + " Saidas_Series.Serie,Saidas.Filial," + " Saidas.Data," + " Saidas.Vendedor1," + " Saidas.NFe," + " Saidas_Produtos.Preco_Final," + " Saidas_Produtos.Linha " + "FROM (" + " (Saidas_Produtos INNER JOIN Produtos ON Saidas_Produtos.Codigo = Produtos.Codigo) " + " INNER JOIN (Saidas INNER JOIN Cli_For ON Saidas.Cliente = Cli_For.Codigo) ON " + " (Saidas_Produtos.Filial = Saidas.Filial) AND " + " (Saidas_Produtos.Sequencia = Saidas.Sequencia)" + ") " + "INNER JOIN Saidas_Series ON" + " (Saidas_Series.Filial = Saidas_Produtos.Filial) AND" + " (Saidas_Produtos.Linha = Saidas_Series.Linha) AND" + " (Saidas_Produtos.Sequencia = Saidas_Series.Sequencia) " + "WHERE Saidas.Sequencia=?" + " AND Saidas_Series.Sequencia=?" + " AND Saidas.Filial=?" + " AND Saidas_Produtos.Filial=?" + " AND Saidas_Produtos.Linha=?" + " AND Saidas_Series.Linha=?";

Fica ainda mais legível. Só não pode mesmo é usar a String numa linha só, como ele fez.

N

Mas a forma que usei não foi parecido com o seu exemplo, que terminou dando errado? Me explica um pouco mais por favor.

ViniGodoy

O seu erro foi ter esquecido um espaço, justamente pq seu código estava mal indentado e difícil de ler. É fácil cometer erros desse tipo sem organização.

O problema não foi concatenar, usar String ou mesmo não usar o StringBuilder.
Foi deixar o código bagunçado mesmo.

N

É. O que um parafuso fora da porca correta num pode causar :shock: . Valeu :smiley:

Criado 6 de outubro de 2011
Ultima resposta 7 de out. de 2011
Respostas 11
Participantes 3