ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Filtrar com Query em intervalo de valores?(resolvido)
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
josedelima
Profissional
Profissional


Registrado: Quarta-Feira, 27 de Abril de 2005
Mensagens: 608

MensagemEnviada: Qui Mai 11, 2006 9:59 am    Assunto: Filtrar com Query em intervalo de valores?(resolvido) Responder com Citação

Bom dia amigos Delphianos, queria fazer um filtro entre valores usando um query

É o seguinte tenho um dbgrid com o valor maior para o menor DESC que fica assim

12.500,00
11.450,00
10.000,00

Entaum quero usar dois edits para pegar por exemplo 12.500,00 a 11.450,00, mais naum consegui, olha como fiz

procedure TForm27.BitBtn2Click(Sender: TObject);
begin
dm.qtsaida.ACTIVE:=TRUE;
dm.qtsaida.refresh;
with dm.qtsaida do
begin
close;
sql.clear;
sql.add(\'select * from saidas\');
sql.add(\'WHERE(valor >= \'+StringReplace(StringReplace(MASKEDIT1.Text,\'.\',\'\',[rfReplaceAll]),\',\',\'.\' ,[rfReplaceAll]) and (valor <= \'+StringReplace(StringReplace(MASKEDIT2.Text,\'.\',\'\',[rfReplaceAll]),\',\',\'.\' ,[rfReplaceAll])\');
open;
if DM.QTSAIDA.isempty then
showmessage(\'Nâo a registro de dados para ser impresso. Por favor tente novamente\');
end;

Esses exemplos ja venho copiando de colegas que postam respostas pra mim aqui no forum, mais agora complicou, naum entendo quase nada de programar, mais to tentando aprender com ajuda de voçes.

Gradecido a ajuda de todos.

[Editado em 11/5/2006 por josedelima]

[Editado em 11/5/2006 por josedelima]

[Editado em 12/5/2006 por josedelima]
_________________
JLima_Jrº.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Sufolk
Moderador
Moderador


Registrado: Terça-Feira, 26 de Agosto de 2003
Mensagens: 1996

MensagemEnviada: Qui Mai 11, 2006 10:15 am    Assunto: Filtrar com Query em intervalo de valores?(resolvido) Responder com Citação

Olá José,
o que está errado é somente a forma como você escreveu o sql do where faltou abrir a string denovo, ajeitar os parenteses.....

sql.add(\'WHERE(valor >= \'+StringReplace(StringReplace(MASKEDIT1.Text,\'.\',\'\',[rfReplaceAll]),\',\',\'.\' ,[rfReplaceAll]) + \' and valor <= \'+StringReplace(StringReplace(MASKEDIT2.Text,\'.\',\'\',[rfReplaceAll]),\',\',\'.\' ,[rfReplaceAll])+\')\');

Acho que seria isso.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
josedelima
Profissional
Profissional


Registrado: Quarta-Feira, 27 de Abril de 2005
Mensagens: 608

MensagemEnviada: Qui Mai 11, 2006 10:30 am    Assunto: Filtrar com Query em intervalo de valores?(resolvido) Responder com Citação

Olá fera, verdade sempre me confundo com estes sinais, mais naum está filtrando do jeito que eu preciso.

Olha só se eu colocar assim

17.311,93 a 17.311,93 filtra o valor
agora se eu colocar assim
17.311,93 a 15.550,00 aparece a mensagem
showmessage(\'Nâo a registro de dados para ser impresso. Por favor tente novamente\');

Será que tenho que mudar no lugar do <= >= usar between? Já me falaram dele só que tambem naum sei como usar. Very Happy

No mais fico grato pela ajuda Sufolk.


_________________
JLima_Jrº.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Sufolk
Moderador
Moderador


Registrado: Terça-Feira, 26 de Agosto de 2003
Mensagens: 1996

MensagemEnviada: Qui Mai 11, 2006 10:40 am    Assunto: Filtrar com Query em intervalo de valores?(resolvido) Responder com Citação

Positivo Jose substitua o valor >= <= por between assim:


sql.add(\'WHERE(valor between \'+StringReplace(StringReplace(MASKEDIT1.Text,\'.\',\'\',[rfReplaceAll]),\',\',\'.\' ,[rfReplaceAll]) + \' and \'+StringReplace(StringReplace(MASKEDIT2.Text,\'.\',\'\',[rfReplaceAll]),\',\',\'.\' ,[rfReplaceAll])+\')\');

Abraço Sufolk.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
josedelima
Profissional
Profissional


Registrado: Quarta-Feira, 27 de Abril de 2005
Mensagens: 608

MensagemEnviada: Qui Mai 11, 2006 11:27 am    Assunto: Filtrar com Query em intervalo de valores?(resolvido) Responder com Citação

Muito obrigado Sufolk, valeu funcionou certinho.

Só mais uma perguntinha, tem como eu fazer um order by desc usando somente o ibquery? ou preciso do IBUpdateSQL.


Gradecido
_________________
JLima_Jrº.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Sufolk
Moderador
Moderador


Registrado: Terça-Feira, 26 de Agosto de 2003
Mensagens: 1996

MensagemEnviada: Qui Mai 11, 2006 11:58 am    Assunto: Filtrar com Query em intervalo de valores?(resolvido) Responder com Citação

Então, se você não for incluir alterar ou excluir nada dessa query ela não precisa do IBUpdateSQL, somente quando você for fazer alguma alteração no banco é necessário ligação com esse componente.

Até mais....

Sufolk.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
josedelima
Profissional
Profissional


Registrado: Quarta-Feira, 27 de Abril de 2005
Mensagens: 608

MensagemEnviada: Qui Mai 11, 2006 2:42 pm    Assunto: Filtrar com Query em intervalo de valores?(resolvido) Responder com Citação

Muito obrigado valeu.

Só tenho mais uma perguntinha pra ficar perfeito

tem como eu colocar um count(campo) somente dos valores apos filtrados?

fiz assim mais naum pega somente os filtrados pega todos
select count(campo) from tabela

Queria na hora do filtro aparecer quantos foram filtrados, ou tem que fazer na mesma query que fiz antes? Tentei mais ai da erro
sql.add(\'select cnpj,codigo,descricao,valor,taxa,ipi,count(cnpj) from saidas\');
sql.add(\'WHERE(valor between \'+StringReplace(StringReplace(MASKEDIT1.Text,\'.\',\'\',[rfReplaceAll]),\',\',\'.\' ,[rfReplaceAll]) + \' and \'+StringReplace(StringReplace(MASKEDIT2.Text,\'.\',\'\',[rfReplaceAll]),\',\',\'.\' ,[rfReplaceAll])+\')\');
sql.add(\'order by valor DESC\');

Naum aceita

Gradecido
_________________
JLima_Jrº.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Sufolk
Moderador
Moderador


Registrado: Terça-Feira, 26 de Agosto de 2003
Mensagens: 1996

MensagemEnviada: Qui Mai 11, 2006 2:50 pm    Assunto: Filtrar com Query em intervalo de valores?(resolvido) Responder com Citação

Se você for fazer a contagem por SQL você tem que usar a mesma sentença usada no where do script anterior. Nesse seu caso como o IBQuery retorna o nro de registros e você já está abrindo mesmo a query eu faria assim após o open da query.
....
ibquery.Open;
ibquery.FetchAll;
editNumeroRegistros.Caption := IntToStr(ibquery.RecordCount);

flw Abraço.

Sufolk.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
josedelima
Profissional
Profissional


Registrado: Quarta-Feira, 27 de Abril de 2005
Mensagens: 608

MensagemEnviada: Qui Mai 11, 2006 3:06 pm    Assunto: Filtrar com Query em intervalo de valores?(resolvido) Responder com Citação

Perfeito fera.

Muito bom, tu manja mesmo.

Caso resolvido, muito obrigado Sufolk
_________________
JLima_Jrº.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
josedelima
Profissional
Profissional


Registrado: Quarta-Feira, 27 de Abril de 2005
Mensagens: 608

MensagemEnviada: Qui Mai 11, 2006 4:01 pm    Assunto: Filtrar com Query em intervalo de valores?(resolvido) Responder com Citação

Olá novamente,
Acho até importuno de minha parte, mais se eu naum perguntar nuca vou conseguir saber.

Neste caso porquê naum filtra?

dm.qcnpj.ACTIVE:=TRUE;
with dm.qcnpj do
begin
close;
sql.clear;
sql.add(\'select cnpj, sum(valor)as valor, sum(ipi)as ipi from saida\');
sql.add(\'WHERE(valor between \'+StringReplace(StringReplace(MASKEDIT1.Text,\'.\',\'\',[rfReplaceAll]),\',\',\'.\' ,[rfReplaceAll]) + \' and \'+StringReplace(StringReplace(MASKEDIT2.Text,\'.\',\'\',[rfReplaceAll]),\',\',\'.\' ,[rfReplaceAll])+\')\');
sql.add(\'group by cnpj order by 2 DESC\');
open;
dm.qTSaida.FetchAll;
eNR.Caption := IntToStr(dm.qcnpj.RecordCount);
if DM.Qcnpj.isempty then
showmessage(\'Nao a registro de dados para ser impresso. Por favor tente novamente\');
end;

Repare que agora o select mudou e inclusive tem um group by.

Ou se é de outra maneira que se faz este select?
_________________
JLima_Jrº.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Sufolk
Moderador
Moderador


Registrado: Terça-Feira, 26 de Agosto de 2003
Mensagens: 1996

MensagemEnviada: Qui Mai 11, 2006 4:53 pm    Assunto: Filtrar com Query em intervalo de valores?(resolvido) Responder com Citação

Não entendi o por que não iria filtrar Jose, nesse script o sistema deve retornar a soma de todas as saídas entre maskedit1 e maskedit2 e agrupálas por cnpj tipo

cnpj valor ipi
1 10,00 1,00
1 15,00 1,00
1 22,00 1,00
2 13,00 1,00
2 17,00 2,00

se eu pegar no intervalo 10 a 20 ele tem que me retornar
cnpj sum1 sum2
1 25,00 2,00
2 30,00 3,00

Mas veja bem Jose se não está fazendo dessa forma.
Não há a necessidade de colocar esse código abaixo pois você vai fechar a query e abrir novamente abaixo.
dm.qcnpj.ACTIVE:=TRUE;

Aguardo retorno.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
josedelima
Profissional
Profissional


Registrado: Quarta-Feira, 27 de Abril de 2005
Mensagens: 608

MensagemEnviada: Qui Mai 11, 2006 5:07 pm    Assunto: Filtrar com Query em intervalo de valores?(resolvido) Responder com Citação

Olá Sufolk, na dbgrid ja esta agrupada, agora num bitbtn queria que mostrasse somente os valores do intervalo entre tal valor a tal valor, e naum está me retornando nada, ja tirei o active do query no começo

me mostra a mesma mensagem de antes

showmessage(\'Nao a registro de dados para ser impresso. Por favor tente novamente\');





_________________
JLima_Jrº.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
josedelima
Profissional
Profissional


Registrado: Quarta-Feira, 27 de Abril de 2005
Mensagens: 608

MensagemEnviada: Qui Mai 11, 2006 5:16 pm    Assunto: Filtrar com Query em intervalo de valores?(resolvido) Responder com Citação

Fazendo uns testes aqui descobri algo estranho, veja

tenho na dbgrid valores acumulados por cnpj neste valor

102.000,00
85.000,00
80.000,00
assim ate 500,00

ai pedi para filtrar entre 80.000,00 a 103.000,00 (naum aparece nada, só a mensagem acima do showmessage)

agora se eu pésso de 10.000 a 103.000,00 aparece na dbgrid assim
20.985,00
até
10.088,00

Enquanto deveria filtrar de
102.801,00 //que é o maior valor
a
10.088,00 //que é o menor valor entre o intervalo

O quê pode ser caro amigo?
_________________
JLima_Jrº.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Sufolk
Moderador
Moderador


Registrado: Terça-Feira, 26 de Agosto de 2003
Mensagens: 1996

MensagemEnviada: Qui Mai 11, 2006 5:39 pm    Assunto: Filtrar com Query em intervalo de valores?(resolvido) Responder com Citação

O que você tem que entender José é que o acumulado pode mostrar valores fora do intervalo pois ele vai acumular os valores que tiverem no intervalo mas a soma pode sair do intervalo
como o exemplo que postei:
cnpj valor ipi
1 10,00 1,00
1 15,00 1,00
1 22,00 1,00
2 13,00 1,00
2 17,00 2,00

se eu gerar
select *
from saida
where valor between 10 and 20 ele vai gerar para mim
1 10,00 1,00
1 15,00 1,00
2 13,00 1,00
2 17,00 2,00


se eu pedir
select cnpj, sum(valor), sum(ipi)
from saida
where valor between 10 and 20
group by cnpj

ele vai retornar
1 25,00 2,00
2 30,00 3,00

e 25 e 30 estão fora do limite mas o 25 e 30 é o acumulado por cnpj dos valores entre 10 e 20 agora se você quizer que o acumulado por cnpj fique no intervalo você vai ter que fazer o script assim

select cnpj, sum(valor), sum(ipi)
from vendas
group by cnpj
having sum(valor) between 35 and 40

ai o acumulado dos valores deve ser entre 35 e 40 e nos exemplos que te postei
1 47,00 3,00

pois o cnpj 1 é o único em que o acumulado do valor está entre 35 e 40 reais.

Não sei se fui bem claro Jose mas acho que é esse o caminho:
Sufolk.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
josedelima
Profissional
Profissional


Registrado: Quarta-Feira, 27 de Abril de 2005
Mensagens: 608

MensagemEnviada: Qui Mai 11, 2006 5:52 pm    Assunto: Filtrar com Query em intervalo de valores?(resolvido) Responder com Citação

Acho que entendi sim Sufolk, mais no meu caso a gird ja vem com a SQL pronta agrupada e somada por CNPJ, o que eu quero mesmo é fazer um intervalo entre elas e naum somar novamente por isso acho que estou errado com esta SQL.

Agora se já esta agrupada acho tambem que naum ha necessidade de agrupar novamente para filtrar só queria mostrar os intervalos que já estaum agrupados.

[Editado em 11/5/2006 por josedelima]
_________________
JLima_Jrº.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB