Erro no Sql

Olá pessoal,

estou com um problema sério para resolver.

Tenho uma query, que quando eu a executo no phpmyadmin, ela roda perfeitamente, no sql builder no sc também, mas quando eu coloco a query para executar no campo de Comando SQL da aplicação ela está retornando um erro.

Esse erro é eliminado quando retiro os cases da query. Abaixo segue a query e em seguida o erro gerado.

SELECT F.fin_id, F.pro_id as pro, F.fin_numero_doc as num_doc, F.fin_descricao as descri, F.fin_quantidade as qnt, F.fin_observacao as obs, year(F.fin_emissao) as ano, month(F.fin_emissao) as mes, day(F.fin_emissao) as dia, F.ope_id as operacao, F.usu_id as usuario, F.tis_id as tipo_servico, CASE WHEN RS.PES_ID IS NOT NULL THEN CONCAT("RH - ",(SELECT pes_nome FROM tb_pessoal WHERE pes_id = RS.PES_ID)) WHEN RS.EMPRESAS_ID IS NOT NULL THEN CONCAT("EP - ",(SELECT nome_razao FROM tb_empresas WHERE id = RS.EMPRESAS_ID)) WHEN RS.EMPRESAS_GRUPO_ID IS NOT NULL THEN CONCAT("EG - ",(SELECT razao FROM tb_empresas_grupo WHERE id = RS.EMPRESAS_GRUPO_ID)) END NOME_SACADO FROM tb_financeiro F LEFT JOIN rel_sacado_financeiro RS ON F.FIN_ID = RS.TB_FINANCEIRO_FIN_ID WHERE F.FIN_ID = 4354

Erro

ERRO Erro ao acessar o banco de dados Unknown column 'F.pro_id' in 'field list' SELECT fin_id, F.pro_id as pro, fin_numero_doc as num_doc, fin_descricao as descri, fin_quantidade as qnt, fin_observacao as obs, year(fin_emissao) as ano, month(fin_emissao) as mes, day(fin_emissao) as dia, ope_id as operacao, usu_id as usuario, tis_id as tipo_servico, NOME_SACADO from (SELECT F.fin_id, F.pro_id as pro, F.fin_numero_doc as num_doc, F.fin_descricao as descri, F.fin_quantidade as qnt, F.fin_observacao as obs, year(F.fin_emissao) as ano, month(F.fin_emissao) as mes, day(F.fin_emissao) as dia, F.ope_id as operacao, F.usu_id as usuario, F.tis_id as tipo_servico, CASE WHEN RS.PES_ID IS NOT NULL THEN CONCAT("RH - ",(SELECT pes_nome FROM tb_pessoal WHERE pes_id = RS.PES_ID)) WHEN RS.EMPRESAS_ID IS NOT NULL THEN CONCAT("EP - ",(SELECT nome_razao FROM tb_empresas WHERE id = RS.EMPRESAS_ID)) WHEN RS.EMPRESAS_GRUPO_ID IS NOT NULL THEN CONCAT("EG - ",(SELECT razao FROM tb_empresas_grupo WHERE id = RS.EMPRESAS_GRUPO_ID)) END NOME_SACADO FROM tb_financeiro F LEFT JOIN rel_sacado_financeiro RS ON F.FIN_ID = RS.TB_FINANCEIRO_FIN_ID WHERE F.FIN_ID = 4354) nm_sel_esp

já tentou aspas simples no concat?

Não tinha testado ainda, mas acabei de testar e não resolveu.

De fato, é alguma incompatibilidade com o sc na hora de usar o case.

Com já havia falado, essa query funciona no phpmyadmin e no sc apenas se eu retirar o case.

Crie a view:

create view minha_view as Código: [Selecionar] SELECT F.fin_id as id, F.pro_id as pro, F.fin_numero_doc as num_doc, F.fin_descricao as num_doc, F.fin_quantidade as qnt, F.fin_observacao as obs, year(F.fin_emissao) as ano, month(F.fin_emissao) as mes, day(F.fin_emissao) as dia, F.ope_id as operacao, F.usu_id as usuario, F.tis_id as tipo_servico, CASE WHEN RS.PES_ID IS NOT NULL THEN CONCAT("RH - ",(SELECT pes_nome FROM tb_pessoal WHERE pes_id = RS.PES_ID)) WHEN RS.EMPRESAS_ID IS NOT NULL THEN CONCAT("EP - ",(SELECT nome_razao FROM tb_empresas WHERE id = RS.EMPRESAS_ID)) WHEN RS.EMPRESAS_GRUPO_ID IS NOT NULL THEN CONCAT("EG - ",(SELECT razao FROM tb_empresas_grupo WHERE id = RS.EMPRESAS_GRUPO_ID)) END NOME_SACADO FROM tb_financeiro F LEFT JOIN rel_sacado_financeiro RS ON F.FIN_ID = RS.TB_FINANCEIRO_FIN_ID

no sql da consulta:

Select id,pro,num_doc,num_doc, qnt,obs,mes, dia,operacao,usuario,tipo_servico,NOME_SACADO     from minha view id=[var_id]

Rapaz o sc não é muito bom para apontar errors sql, baixe o mySql WorkBench e teste esse sql. Eu estava tendo problemas em alguns sqls e no phpMyAdmin Funcionavam, ai eu baixei o Workbench ele mostrou alguns erros, que resolveram meu problema.

No Workbench tb funciona perfeito.

É eriton então eu não sei, eu tenho CASES aqui, tenta fazer da forma de view que o Haroldo falou mas creio que vai dar o mesmo erro.

Pois é… não entendo o pq desse erro. o próprio sql builder executa essa query normalmente.

eu tb acho que essa view não vai resultar em nada diferente.

Então,

eu descobri que a aplicação estava bugada ou então tinha alguma configuração nela que eu não tinha conhecimento.

Quando eu criei outra aplicação e usei a query citada, funcionou. Simples assim.

Vlw a todos pela ajuda ai…

Eu explico.

Isso ocorre na v5 também.

quando vc cria uma app de consulta, o select dela é guardado em dois lugares, um na tabela da aplicação (base de dados da ferramenta), e parte deles na tabela de colunas.

Quando se tem uma expressão, tipo case numa coluna, com o alias, a tabela de colunas guarda essa expressão, se vc troca a expressão no select principal, a da coluna não é alterado, por isso continuava o erro.

Quando houver necessidade de complexabilidade na coluna da consulta eu aconselho sempre usar view, para simplificar a instrução.

Bem interessante saber disso, mas eu ainda acho que a netmake deviria ver isso melhor.

Não se se estou correto, mas acho que a cada alteração do sql da aplicação, tudo deveria ser limpo do banco e salvo novamente.

Pessoal boa tarde.

Também estou com erro no concat. Já tentei aspas duplas e simples sem efeito, a consulta funciona normalmente no WorkBench mas no Report PDF não funciona, reparei que o SC muda a consulta colocando hifens e na hora que vai executar no banco de dados ocorre o erro.

A consulta original é esta:

select
tb_atendimento.id_atendimento,
tb_atendimento.datahora,
tb_atendimento.total_minutos_atend,
tb_atendimento.total_valor_faturar,
tb_atendimento.titulo_atendimento,
tb_atendimento.faturar_atend,
tb_status_atendimento.descricao status,
tb_tipo_atendimento.desc_tipo_atend tipo,
tb_empresa.nome nome_empresa,
concat(tb_empresa.endereco,’ - ‘,tb_empresa.cidade,’/’,tb_empresa.uf,‘Cep:’,cep ) endereco,
tb_produtos.descricao nome_produto,
a.nome nome_tecnico,
b.nome nome_solicitante

from
tb_atendimento
inner join tb_status_atendimento
on (tb_atendimento.id_status = tb_status_atendimento.id_status_atendimento)
inner join tb_tipo_atendimento
on (tb_atendimento.id_tipo_atend = tb_tipo_atendimento.id_tipo_atend)
inner join tb_empresa
on (tb_atendimento.id_empresa = tb_empresa.id_empresa)
inner join tb_contrato
on (tb_contrato.id_contrato = tb_atendimento.id_contrato)
inner join tb_produtos
on (tb_produtos.id_produto = tb_contrato.id_produto )
inner join tb_pessoa a
on (tb_atendimento.id_responsavel = a.id_pessoa)
inner join tb_pessoa b
on (tb_atendimento.id_solicitante = b.id_pessoa)

where
tb_atendimento.id_atendimento = 116

A nova consulta com os erros que pelo que identifiquei quando faço a consulta repassando o formato TABELA.CAMPO ele insere os HIFENS e com isto ocorre erro de sintaxe como mostrado abaixo:

Erro ao acessar o banco de dados
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘.uf,'Cep:',cep ) endereco as concat_12 from tb_atendimento inner join tb_sta’ at line 1

SELECT tb_atendimento.id_atendimento as id_atendimento,
tb_atendimento.datahora as tb_atendimento_datahora,
tb_atendimento.total_minutos_atend as total_minutos,
tb_atendimento.total_valor_faturar as total_valor,
tb_atendimento.titulo_atendimento as titulo,
tb_atendimento.faturar_atend as tb_atendimento_faturar_atend,
tb_status_atendimento.descricao as status,
tb_tipo_atendimento.desc_tipo_atend as tipo,
tb_empresa.nome as nome_empresa,
tb_produtos.descricao as nome_produto, a.nome as nome_tecnico,
b.nome as nome_solicitante, concat(tb_empresa.endereco,' - ',tb_empresa.cidade,'/',tb_empresa.uf,'Cep:',cep ) endereco as concat_12

from tb_atendimento
inner join tb_status_atendimento
on (tb_atendimento.id_status = tb_status_atendimento.id_status_atendimento)
inner join tb_tipo_atendimento
on (tb_atendimento.id_tipo_atend = tb_tipo_atendimento.id_tipo_atend)
inner join tb_empresa
on (tb_atendimento.id_empresa = tb_empresa.id_empresa)
inner join tb_contrato
on (tb_contrato.id_contrato = tb_atendimento.id_contrato)
inner join tb_produtos
on (tb_produtos.id_produto = tb_contrato.id_produto )
inner join tb_pessoa a
on (tb_atendimento.id_responsavel = a.id_pessoa)
inner join tb_pessoa b
on (tb_atendimento.id_solicitante = b.id_pessoa)

where tb_atendimento.id_atendimento = 116

se eu remover os nomes das tabelas ele continua inserindo o HIFEN, seguer o código do 2º erro:

ERRO
Erro ao acessar o banco de dados
Unknown column ‘concat(endereco,’ - ‘,cidade,’/’,uf,’ Cep: ‘,cep )’ in ‘field list’

SELECT tb_atendimento.id_atendimento as id_atendimento, tb_atendimento.datahora as tb_atendimento_datahora, tb_atendimento.total_minutos_atend as total_minutos, tb_atendimento.total_valor_faturar as total_valor, tb_atendimento.titulo_atendimento as titulo, tb_atendimento.faturar_atend as tb_atendimento_faturar_atend, tb_status_atendimento.descricao as status, tb_tipo_atendimento.desc_tipo_atend as tipo, tb_empresa.nome as nome_empresa, tb_produtos.descricao as nome_produto, a.nome as nome_tecnico, b.nome as nome_solicitante, concat(endereco,' - ',cidade,'/',uf,' Cep: ',cep ) as concat_12

from tb_atendimento
inner join tb_status_atendimento on (tb_atendimento.id_status = tb_status_atendimento.id_status_atendimento)

inner join tb_tipo_atendimento on (tb_atendimento.id_tipo_atend = tb_tipo_atendimento.id_tipo_atend)
inner join tb_empresa on (tb_atendimento.id_empresa = tb_empresa.id_empresa)
inner join tb_contrato on (tb_contrato.id_contrato = tb_atendimento.id_contrato)
inner join tb_produtos on (tb_produtos.id_produto = tb_contrato.id_produto ) inner join tb_pessoa a on (tb_atendimento.id_responsavel = a.id_pessoa)
inner join tb_pessoa b on (tb_atendimento.id_solicitante = b.id_pessoa)
where tb_atendimento.id_atendimento = 116

Só conseguir resolver colocando o CONCAT na view (e refazendo o relatório)