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"));
............
Consulta no SQL Server 2005 apresentando erro
11 Respostas
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?
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
É pelo menos não apresenta o mesmo erro.Valeu. Vou aqui denovo apanhar. Você diz a String query=…?
Ah, e o [Ajuda] no título não muda em nada.
Se não precisasse de ajuda, não criaria um tópico.
Caramba, calma ai foi só um [AJUDA]. Mas muito obrigado
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].
Desculpas pela bagunça. Muito obrigado mesmo por me ajudarem. As vezes precisamos de uns coques na cabeça pra aprender as minimas coisas.
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.
Mas a forma que usei não foi parecido com o seu exemplo, que terminou dando errado? Me explica um pouco mais por favor.
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.
É. O que um parafuso fora da porca correta num pode causar :shock: . Valeu 