Não Consigo fazer Select Count via Programação!!!

Delphi

30/01/2004

Ola Galera...

Preciso fazer um Select Count via Programação usando alguns parâmetros numa ado Query com Banco Access.

Não dá certo de jeito nenhum.

o Select Count só funciona se eu fizer direto na query lá no datamodule
e não via programação. Só que eu precisava que fosse pq eu uso um if no meio da consulta pra definir os parâmetros


Alguém poderia ajudar ?


Info.wtomfs

Info.wtomfs

Curtidas 0

Respostas

Lucas Silva

Lucas Silva

30/01/2004

coloca o código da sua consulta ai....
vai ficar bem mais fácil.


GOSTEI 0
Info.wtomfs

Info.wtomfs

30/01/2004

esta é a consulta com select count que estou fazendo.
A consulta tá certa, mas só funciona se eu colocar direto no componente
só que eu preciso destes ifs para definir os parâmetros.


With Dm_Questionario.Qry_ContaRespostas do
Begin
Close;
With Sql do
Begin
Clear;
Add(´SELECT Count(a.Cd_Resposta) as Nr_Respostas´);
Add(´FROM Respostas a,´);
Add(´ Cad_Gabarito b,´);
Add(´ Cad_Questionario c,´);
Add(´ Cad_Pergunta d,´);
Add(´ Cad_Resposta e,´);
Add(´ Loja f,´);
Add(´ Produto_Cor_tamanho g,´);
Add(´ Produto h´);
Add(´WHERE f.CdLoja = a.Cd_Loja and´);
Add(´ g.CdProduto = a.Cd_Produto and´);
Add(´ h.CdProduto = g.CdProduto and´);

// PARÂMETROS DO RELATÓRIO

if RadioButton_Grupo.Checked = true then
Add(´ f.CdGrupoLoja = ´+ #39 + Dm_Questionario.Qry_LeGrupoCdGrupo.Value + 39 + ´and´);
if RadioButton_Linha.Checked = True then
Add(´ h.Cdlinha = ´+ Dm_Questionario.Qry_LeLinhaProdutoCdLinha.Value + ´and´);
if RadioButton_Praca.Checked = True then
Add(´ f.CdPraca = ´+ Dm_Questionario.Qry_LePracaCdPraca.AsString + ´and´);

Add(´ a.CD_PERGUNTA = d.CD_PERGUNTA and´);
Add(´ a.CD_PERGUNTA = ´+ Dm_Questionario.Qry_PerguntaCD_PERGUNTA.AsString + ´and´);
Add(´ c.CD_QUESTIONARIO = a.CD_QUESTIONARIO and´);
Add(´ a.CD_QUESTIONARIO = b.CD_QUESTIONARIO and´);
Add(´ e.CD_RESPOSTA = a.CD_RESPOSTA and´);
Add(´ a.CD_RESPOSTA = b.CD_RESPOSTA and´);
Add(´ a.CD_GABARITO = ´+ Dm_Questionario.Qry_SelecionaGabaritoCd_Gabarito.AsString);
End;


GOSTEI 0
Jorgeboo

Jorgeboo

30/01/2004

Tenta passar parâmetros de um jeito diferente.

Ex. O SQL da sua Query pode fica mais ou menos assim.

´SELECT COUNT (A.CD_RESPOSTA) FROM RESPOSTAS A, CAD_GABARITO B , CAD_QUESTIONARIO C, ...
WHERE A.CD_PERGUNTA = :A AND A.CD_GABARITO = :B´ ...

Depois você usa assim.

Dm_Questionario.Qry_ContaRespostas.Close;
Dm_Questionario.Qry_ContaRespostas.ParambyName(´A´).asString := Dm_Questionario.Qry_PerguntaCD_PERGUNTA.AsString;
Dm_Questionario.Qry_ContaRespostas.ParambyName(´B´).asString := Dm_Questionario.Qry_SelecionaGabaritoCd_Gabarito.AsString;
Dm_Questionario.Qry_ContaRespostas.Open;

O WHERE e o FROM não estão certos, coloca todas aquelas condições e tabelas que você descreveu.

É mais ou menos isso, espero que possa te ajudar


GOSTEI 0
Info.wtomfs

Info.wtomfs

30/01/2004

È que o meu problema é que eu vou usar um parâmetro de cada vez.
Na tela antes da consulta o usuário vai selecionar as opções entre :
CdGrupoLoja => Código do Grupo da Loja ou
CdLinha => Código da linha do produto ou
CdPraca => Código da Praça que ela faz parte (SP,RJ)

Então por isso que eu não fiz na query no DataMódule


Como vou fazer para não usar um ou outro por exemplo
Na parte do Parâmetros do Reletório eu escolho entre incluir na cláusula Where ou CdGrupoLoja ou CdLinha ou CdPraca não pode ser os três
Via Programação eu teria que deletar as linhas que não serção usadas
Agora eu não entendo pq o select count não funciona via programação


WHERE f.CdLoja = a.Cd_Loja and
g.CdProduto = a.Cd_Produto and
h.CdProduto = g.CdProduto and

// PARÂMETROS DO RELATÓRIO

f.CdGrupoLoja = :Cd_Grupo and
h.Cdlinha = :Cd_Linha and
f.CdPraca = :Cd_Praca and
a.CD_PERGUNTA = d.CD_PERGUNTA and
a.CD_PERGUNTA and
c.CD_QUESTIONARIO = a.CD_QUESTIONARIO and
a.CD_QUESTIONARIO = b.CD_QUESTIONARIO and
e.CD_RESPOSTA = a.CD_RESPOSTA and´);
a.CD_RESPOSTA = b.CD_RESPOSTA and´);
a.CD_GABARITO = :Cd_Gabarito


GOSTEI 0
POSTAR