Fórum Não Consigo fazer Select Count via Programação!!! #210490
30/01/2004
0
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
Curtir tópico
+ 0Posts
30/01/2004
Lucas Silva
vai ficar bem mais fácil.
Gostei + 0
30/01/2004
Info.wtomfs
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
30/01/2004
Jorgeboo
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
30/01/2004
Info.wtomfs
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
Clique aqui para fazer login e interagir na Comunidade :)