Consulta SQL com base de dados MySQL

Delphi

12/07/2004

Olá pessoal,

O q está errado nesta consulta?


SELECT DISTINCTROW TB_Avaliacao.AnoDaAvaliacao, TB_Avaliacao.NomeDaUnidade, TB_Avaliacao.CodigoDoCurso, TB_Avaliacao.NomeDoCurso, TB_Avaliacao.NomeDoProfessor, TB_Avaliacao.NomeDaDisciplina, First(TB_DetalhesDaAvaliacao.CodigoDaPergunta) AS CodPergunta, First(TB_DetalhesDaAvaliacao.CodigoDaResposta) AS CodResposta, Sum(TB_DetalhesDaAvaliacao.Contador) AS SomaDeNumero, (([Soma De Numero]*100)/Sum([Contador])/100) AS Percentual, ([Soma de Numero]*[CodigoDaResposta]) AS ValorGeral, TB_DetalhesDaAvaliacao.CodigoDaResposta, TB_DetalhesDaAvaliacao.Resposta, TB_DetalhesDaAvaliacao.Pergunta FROM TB_Avaliacao INNER JOIN TB_DetalhesDaAvaliacao ON TB_Avaliacao.CodigoDaAvaliacao = TB_DetalhesDaAvaliacao.CodigoDaAvaliacao GROUP BY TB_Avaliacao.AnoDaAvaliacao, TB_Avaliacao.NomeDaUnidade, TB_Avaliacao.CodigoDoCurso, TB_Avaliacao.NomeDoCurso, TB_Avaliacao.NomeDoProfessor, TB_Avaliacao.NomeDaDisciplina, TB_DetalhesDaAvaliacao.CodigoDaResposta, TB_DetalhesDaAvaliacao.Resposta, TB_DetalhesDaAvaliacao.Pergunta HAVING First(TB_DetalhesDaAvaliacao.CodigoDaResposta)>0;



Quando mando ativar a consulta surge a mensagem:


You have an error in your SQL syntax near ´(TB_DetalhesDaAvaliacao.CodigoDaPergunta) AS CodPergunta, First(TB_DetalhesDaAva´ at line 1.


Como posso corrigir isso?

Grato,

Ilano.


Ilanocf

Ilanocf

Curtidas 0

Respostas

Ilanocf

Ilanocf

12/07/2004

:roll:


GOSTEI 0
Ilanocf

Ilanocf

12/07/2004

Olá pessoal,

Mudei o código acima para este:

SELECT DISTINCTROW TB_Avaliacao.AnoDaAvaliacao, TB_Avaliacao.NomeDaUnidade, TB_Avaliacao.CodigoDoCurso, TB_Avaliacao.NomeDoCurso, TB_Avaliacao.NomeDoProfessor, TB_Avaliacao.NomeDaDisciplina, ´First TB_DetalhesDaAvaliacao.CodigoDaPergunta´ AS CodPergunta, ´First TB_DetalhesDaAvaliacao.CodigoDaResposta´ AS CodResposta, ´Sum TB_DetalhesDaAvaliacao.Contador´ AS SomaDeNumero, ´((Soma De Numero*100)/Sum([Contador])/100)´ AS Percentual, ´(Soma de Numero * CodigoDaResposta)´ AS ValorGeral, TB_DetalhesDaAvaliacao.CodigoDaResposta, TB_DetalhesDaAvaliacao.Resposta, TB_DetalhesDaAvaliacao.Pergunta FROM TB_Avaliacao INNER JOIN TB_DetalhesDaAvaliacao ON TB_Avaliacao.CodigoDaAvaliacao = TB_DetalhesDaAvaliacao.CodigoDaAvaliacao GROUP BY TB_Avaliacao.AnoDaAvaliacao, TB_Avaliacao.NomeDaUnidade, TB_Avaliacao.CodigoDoCurso, TB_Avaliacao.NomeDoCurso, TB_Avaliacao.NomeDoProfessor, TB_Avaliacao.NomeDaDisciplina, TB_DetalhesDaAvaliacao.CodigoDaResposta, TB_DetalhesDaAvaliacao.Resposta, TB_DetalhesDaAvaliacao.Pergunta HAVING ´First TB_DetalhesDaAvaliacao.CodigoDaResposta > 0´;


O problema é q não está exibindo os dados, embora o componente aceite alterar a propriedade [b:5374737264]Active[/b:5374737264] para [b:5374737264]True[/b:5374737264].


GOSTEI 0
Nildo

Nildo

12/07/2004

Se não está exibindo é porque não retornou nenhum registro :wink:


GOSTEI 0
Ilanocf

Ilanocf

12/07/2004

Refiz o DBGrid e agora o q está aparecendo é isto:


Se a imagem não abrir o link é este: [url]http://geocities.yahoo.com.br/linkotecabr/imagem.jpg[/url]


GOSTEI 0
Nildo

Nildo

12/07/2004

a imagem nao exibe em nenhum dos dois casos


GOSTEI 0
Ilanocf

Ilanocf

12/07/2004

Então tente novamente neste link: [url]http://geocities.yahoo.com.br/linkotecabr/[/url]


GOSTEI 0
Nildo

Nildo

12/07/2004

É que você colocou alguns campos entre aspas, remova-as!


GOSTEI 0
Ilanocf

Ilanocf

12/07/2004

Esse é o problema Nildo. Se eu remover as aspas surge a mensagem:

You have an error in your SQL syntax near ´(TB_DetalhesDaAvaliacao.CodigoDaPergunta) AS CodPergunta, First(TB_DetalhesDaAva´ at line 1.


Não sei mais o q fazer!


GOSTEI 0
Ilanocf

Ilanocf

12/07/2004

:(


GOSTEI 0
Nildo

Nildo

12/07/2004

Tira o First para ver se o problema não está nele


GOSTEI 0
Ilanocf

Ilanocf

12/07/2004

Nildo,

Fiz como vc disse:

SELECT DISTINCTROW TB_Avaliacao.AnoDaAvaliacao, TB_Avaliacao.NomeDaUnidade, TB_Avaliacao.CodigoDoCurso, TB_Avaliacao.NomeDoCurso, TB_Avaliacao.NomeDoProfessor, TB_Avaliacao.NomeDaDisciplina, (TB_DetalhesDaAvaliacao.CodigoDaPergunta|) AS CodPergunta, (TB_DetalhesDaAvaliacao.CodigoDaResposta) AS CodResposta, Sum(TB_DetalhesDaAvaliacao.Contador) AS SomaDeNumero,((SomaDeNumero*100)/Sum(Contador)/100) AS Percentual, (SomaDeNumero * CodigoDaResposta) AS ValorGeral, TB_DetalhesDaAvaliacao.CodigoDaResposta, TB_DetalhesDaAvaliacao.Resposta, TB_DetalhesDaAvaliacao.Pergunta, TB_DetalhesDaAvaliacao.CodigoDaPergunta FROM TB_Avaliacao INNER JOIN TB_DetalhesDaAvaliacao ON TB_Avaliacao.CodigoDaAvaliacao = TB_DetalhesDaAvaliacao.CodigoDaAvaliacao GROUP BY TB_Avaliacao.AnoDaAvaliacao, TB_Avaliacao.NomeDaUnidade, TB_Avaliacao.CodigoDoCurso, TB_Avaliacao.NomeDoCurso, TB_Avaliacao.NomeDoProfessor, TB_Avaliacao.NomeDaDisciplina, TB_DetalhesDaAvaliacao.CodigoDaResposta, TB_DetalhesDaAvaliacao.Resposta, TB_DetalhesDaAvaliacao.Pergunta, TB_DetalhesDaAvaliacao.CodigoDaPergunta HAVING TB_DetalhesDaAvaliacao.CodigoDaPergunta = 1;


Quando mandei ativar a consulta surgiu a mensagem:

You have an error in your SQL syntax near´) AS CodPergunta, (TB_DetalhesDaAvaliacao.CodigoDaResposta) AS CodResposta, Sum(´ at line 1.


Depois alterei para o seguinte:

[color=red:fb46cac723]SELECT DISTINCTROW TB_Avaliacao.AnoDaAvaliacao, TB_Avaliacao.NomeDaUnidade, TB_Avaliacao.CodigoDoCurso, TB_Avaliacao.NomeDoCurso, TB_Avaliacao.NomeDoProfessor, TB_Avaliacao.NomeDaDisciplina, {First(TB_DetalhesDaAvaliacao.CodigoDaPergunta)} AS PrimeiroDeCodigoDaPergunta, {First(TB_DetalhesDaAvaliacao.CodigoDaResposta)} AS PrimeiroDeCodigoDaResposta, Sum(TB_DetalhesDaAvaliacao.Contador) AS SomaDeNumero, ((SomaDeNumero*100)/{Sum(Contador)}/100) AS Percentual, (Soma de Numero*CodigoDaResposta) AS ValorGeral, TB_DetalhesDaAvaliacao.CodigoDaResposta, TB_DetalhesDaAvaliacao.Resposta, TB_DetalhesDaAvaliacao.Pergunta, TB_DetalhesDaAvaliacao.CodigoDaPergunta FROM TB_Avaliacao INNER JOIN TB_DetalhesDaAvaliacao ON TB_Avaliacao.CodigoDaAvaliacao = TB_DetalhesDaAvaliacao.CodigoDaAvaliacao GROUP BY TB_Avaliacao.AnoDaAvaliacao, TB_Avaliacao.NomeDaUnidade, TB_Avaliacao.CodigoDoCurso, TB_Avaliacao.NomeDoCurso, TB_Avaliacao.NomeDoProfessor, TB_Avaliacao.NomeDaDisciplina, TB_DetalhesDaAvaliacao.CodigoDaResposta, TB_DetalhesDaAvaliacao.Resposta, TB_DetalhesDaAvaliacao.Pergunta, TB_DetalhesDaAvaliacao.CodigoDaPergunta HAVING {(((First(TB_DetalhesDaAvaliacao.CodigoDaResposta))>0)} AND TB_DetalhesDaAvaliacao.CodigoDaPergunta=1;[/color:fb46cac723]


E quando ativei a consulta a mensagem alterou para:

You have an error in your SQL syntax near ´Sum(TB_DetalhesDaAvaliacao.Contador)} AS SomaDeNumero, (([SomaDeNumero]*100)´ at line 1.


Se eu colocar somente assim:
SELECT {First(TB_Avaliacao.CodigoDaAvaliacao)} AS PrimeiroDeCodigoDaAvaliacao FROM TB_Avaliacao;


Dá tudo certo, mas preciso daquela consulta completa para mostrar os dados q preciso.


GOSTEI 0
Ilanocf

Ilanocf

12/07/2004

:roll:


GOSTEI 0
Paulo_amorim

Paulo_amorim

12/07/2004

Olá

Sugiro que vc comece do nada:
pega um SELECT campo FROM tabela...
testa, funciona, blz..
vai implementando pouco a pouco a Query, assim vc tem a dimensão de onde REALMENTE está o erro...
Assim fica bem mais facill...eu já peguei erros por causa disso

Ah, seria bom organizar os campos da Query, assim fica mais fácil de visualizar tudo :wink:

Espero que ajude
Até+


GOSTEI 0
Ilanocf

Ilanocf

12/07/2004

Paulo_Amorim,

Fiz como vc havia dito e agora minha consulta está assim:

SELECT DISTINCTROW TB_Avaliacao.AnoDaAvaliacao, TB_Avaliacao.NomeDaUnidade, TB_Avaliacao.CodigoDoCurso, TB_Avaliacao.NomeDoCurso, TB_Avaliacao.NomeDoProfessor, TB_Avaliacao.NomeDaDisciplina, {First (TB_DetalhesDaAvaliacao.CodigoDaPergunta)} AS CodPergunta, {First(TB_DetalhesDaAvaliacao.CodigoDaResposta)} AS CodResposta, Sum(TB_DetalhesDaAvaliacao.Contador) AS SomaDeNumero, (´SomaDeNumero´*100/Sum(Contador)) AS Percentual, (´SomaDeNumero´ * CodigoDaResposta) AS ValorGeral, TB_DetalhesDaAvaliacao.CodigoDaResposta, TB_DetalhesDaAvaliacao.Resposta, TB_DetalhesDaAvaliacao.Pergunta, TB_DetalhesDaAvaliacao.CodigoDaPergunta FROM TB_Avaliacao INNER JOIN TB_DetalhesDaAvaliacao ON TB_Avaliacao.CodigoDaAvaliacao = TB_DetalhesDaAvaliacao.CodigoDaAvaliacao GROUP BY TB_Avaliacao.AnoDaAvaliacao, TB_Avaliacao.NomeDaUnidade, TB_Avaliacao.CodigoDoCurso, TB_Avaliacao.NomeDoCurso, TB_Avaliacao.NomeDoProfessor, TB_Avaliacao.NomeDaDisciplina, TB_DetalhesDaAvaliacao.CodigoDaResposta, TB_DetalhesDaAvaliacao.Resposta, TB_DetalhesDaAvaliacao.Pergunta, TB_DetalhesDaAvaliacao.CodigoDaPergunta;


O problema é q as colunas Percentua e ValorGeral estão igual a zero e tenho cadastrados 10 registros de teste, o q já poderia haver algum valor naquelas duas colunas, pois em cada registro existem 10 questões, somando um total de 40 questões. O q posso fazer mais??????


GOSTEI 0
Ilanocf

Ilanocf

12/07/2004

EUREKA!!!!!! :P

Finalmente consegui terminar a consulta!!!!!!

SELECT DISTINCTROW TB_Avaliacao.CodigoDoProfessor, TB_Avaliacao.NomeDoProfessor, TB_Avaliacao.NomeDoCurso, TB_Avaliacao.Periodo, TB_Detalhes.CodigoDaPergunta, TB_Detalhes.Pergunta, TB_Detalhes.CodigoDaResposta, TB_Detalhes.Resposta, Sum(TB_Detalhes.Contador) AS SomaDeContador, (Sum(TB_Detalhes.Contador) * TB_Detalhes.CodigoDaResposta) AS ValorGeral, (Sum(TB_Detalhes.Contador)*100/Sum(TB_Detalhes.Contador)) AS Percentual FROM TB_Avaliacao INNER JOIN TB_Detalhes ON TB_Avaliacao.CodigoDaAvaliacao = TB_Detalhes.CodigoDaAvaliacao GROUP BY TB_Avaliacao.CodigoDoProfessor, TB_Avaliacao.NomeDoProfessor, TB_Avaliacao.NomeDoCurso, TB_Avaliacao.Periodo, TB_Detalhes.CodigoDaPergunta, TB_Detalhes.Pergunta, TB_Detalhes.CodigoDaResposta, TB_Detalhes.Resposta HAVING TB_Avaliacao.CodigoDoProfessor=:P1 AND TB_Avaliacao.Periodo=:P2 AND TB_Detalhes.CodigoDaPergunta=:P3;


Valeu Galera! 8)


GOSTEI 0
POSTAR