Autor Tópico: Erro no Sql  (Lida 2569 vezes)

eritonf

  • Avançado
  • ****
  • Mensagens: 297
    • Email
Erro no Sql
« Online: Agosto 22, 2012, 03:34:34 pm »
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.

Código: [Selecionar]
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

Código: [Selecionar]
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
Att.
Ériton Fróes

Haroldo

  • Expert
  • *****
  • Mensagens: 6293
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Erro no Sql
« Responder #1 Online: Agosto 22, 2012, 04:17:09 pm »
já tentou aspas simples no concat?

eritonf

  • Avançado
  • ****
  • Mensagens: 297
    • Email
Re:Erro no Sql
« Responder #2 Online: Agosto 22, 2012, 04:19:41 pm »
Não tinha testado ainda, mas acabei de testar e não resolveu.
Att.
Ériton Fróes

eritonf

  • Avançado
  • ****
  • Mensagens: 297
    • Email
Re:Erro no Sql
« Responder #3 Online: Agosto 22, 2012, 04:21:32 pm »
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.
Att.
Ériton Fróes

Haroldo

  • Expert
  • *****
  • Mensagens: 6293
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Erro no Sql
« Responder #4 Online: Agosto 22, 2012, 04:23:21 pm »
Crie a view:
Código: [Selecionar]
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:

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

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:Erro no Sql
« Responder #5 Online: Agosto 22, 2012, 04:25:46 pm »
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.
-- Design ou programador eis a questão.

eritonf

  • Avançado
  • ****
  • Mensagens: 297
    • Email
Re:Erro no Sql
« Responder #6 Online: Agosto 22, 2012, 04:28:24 pm »
No Workbench tb funciona perfeito.

Att.
Ériton Fróes

Robert Berbert

  • Expert
  • *****
  • Mensagens: 769
  • Desenvolver é sempre estar se atualizando.
    • Conesoft
    • Email
Re:Erro no Sql
« Responder #7 Online: Agosto 22, 2012, 04:29:31 pm »
É 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.
-- Design ou programador eis a questão.

eritonf

  • Avançado
  • ****
  • Mensagens: 297
    • Email
Re:Erro no Sql
« Responder #8 Online: Agosto 22, 2012, 04:30:53 pm »
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.
Att.
Ériton Fróes

eritonf

  • Avançado
  • ****
  • Mensagens: 297
    • Email
Re:Erro no Sql
« Responder #9 Online: Agosto 22, 2012, 07:57:39 pm »
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...
Att.
Ériton Fróes

Haroldo

  • Expert
  • *****
  • Mensagens: 6293
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Erro no Sql
« Responder #10 Online: Agosto 23, 2012, 10:07:58 am »
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.

eritonf

  • Avançado
  • ****
  • Mensagens: 297
    • Email
Re:Erro no Sql
« Responder #11 Online: Agosto 23, 2012, 10:51:54 am »
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.
Att.
Ériton Fróes

Luiz Baião

  • Novato
  • *
  • Mensagens: 31
    • Email
Re:Erro no Sql
« Responder #12 Online: Novembro 14, 2014, 01:30:49 pm »
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)




« Última modificação: Novembro 14, 2014, 02:00:34 pm por Luiz Baião »