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 

Subfiltro de datas

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
mrjorio
Novato
Novato


Registrado: Segunda-Feira, 24 de Setembro de 2012
Mensagens: 85

MensagemEnviada: Seg Fev 17, 2020 10:14 am    Assunto: Subfiltro de datas Responder com Citação

Tenho uma tabela com um campo data que é primary key.
Tenho uma outra tabela onde o usuário é a chave primária.
Tenho um form com três combobox e um editbox para o usuário

Queria fazer com três combobox ou similiares, uma espécie de filtro em que selecionando no primeiro combobox um dos anos possíveis (que tenha pelo menos uma data na tabela) e ele filtre os meses possíveis no próximo combobox. Selecionando o mês, ele filtre os dias possíveis. Assim, após selecionar o dia, eu teria em cada combobox da data dividida em ANO, MÊS e DIA estando a data selecionada na query para após digitar o usuário apertar o enter e registrar o conjunto de Data&Usuário em outra tabela.

A intenção é que no On.Show do form ele atualize a primeira combobox.

Tentei utilizar o o filter mas não funcionou.

Desde já agradeço.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10490
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Qui Fev 27, 2020 9:31 am    Assunto: Responder com Citação

Seu campo data é uma primary key?

Se você fez isto amigo é um tremendo erro, pois data repetem-se e nomes podem ter homônimos, a probabilidade de dar problema é muito grande quando estiver cadastrando dados.
primary key não pode se repetir, pois se acontecer, é certeza de uma exceção no banoc de dados.

Código:
select ID_CODE,
DATA_VENCIMENTO,
extract(DAY from DATA_VENCIMENTO) AS DIA,
extract(MONTH from DATA_VENCIMENTO) AS MES,
extract(YEAR from DATA_VENCIMENTO) AS ANO
from MINHA_TABELA
where 1 = 1
order by ANO, MES, DIA


Outra forma de extrair a data atual:
select CURRENT_DATE as DATA_ATUAL
EXTRACT(DAY from CURRENT_DATE) as DIA,
EXTRACT(MONTH from CURRENT_DATE) as MES,
EXTRACT(YEAR from CURRENT_DATE) as ANO
FROM RDB$DATABASE


Desta forma, basta você fazer as devidas adaptações para extrair o que deseja do banco, mas isto, não exclui o erro de projeto do banco, fato que poderá lhe causa grandes dores de cabeça, visto que usuários erram, principamente nomes e se depois quiser corrigir é um problema.


bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
mrjorio
Novato
Novato


Registrado: Segunda-Feira, 24 de Setembro de 2012
Mensagens: 85

MensagemEnviada: Qui Fev 27, 2020 1:07 pm    Assunto: Responder com Citação

johnny-walker escreveu:
Seu campo data é uma primary key?
Citação:
Sim. Na tabela Evento só existe um por dia. A questão do NOME do usuário na verdade é a matrícula.
Citação:



Se você fez isto amigo é um tremendo erro, pois data repetem-se e nomes podem ter homônimos, a probabilidade de dar problema é muito grande quando estiver cadastrando dados.
primary key não pode se repetir, pois se acontecer, é certeza de uma exceção no banoc de dados.
Citação:
É como se eu registra-se a presença de alguém a um evento. A Chave primária é dupla. O mesmo indivíduo não vai estar no mesmo evento mais de uma vez.
Citação:


Código:
select ID_CODE,
DATA_VENCIMENTO,
extract(DAY from DATA_VENCIMENTO) AS DIA,
extract(MONTH from DATA_VENCIMENTO) AS MES,
extract(YEAR from DATA_VENCIMENTO) AS ANO
from MINHA_TABELA
where 1 = 1
order by ANO, MES, DIA


Outra forma de extrair a data atual:
select CURRENT_DATE as DATA_ATUAL
EXTRACT(DAY from CURRENT_DATE) as DIA,
EXTRACT(MONTH from CURRENT_DATE) as MES,
EXTRACT(YEAR from CURRENT_DATE) as ANO
FROM RDB$DATABASE


Desta forma, basta você fazer as devidas adaptações para extrair o que deseja do banco, mas isto, não exclui o erro de projeto do banco, fato que poderá lhe causa grandes dores de cabeça, visto que usuários erram, principamente nomes e se depois quiser corrigir é um problema.


bye


A questão é trabalhar com os Filtros.

Tinha pensado em adicionar os ANO em uma combobox e depois fazer novamente fazendo o filtro por ano. Depois repetir para separar os meses para aquele ano e, finalmente, usar dois filtros para os dias.
Código:
 
SELECT DISTINCT(strftime(%Y, DATA_EVENTO)) as ANO from EVENTO

depois
Código:
 
SELECT DISTINCT(strftime(%m, DATA_EVENTO)) as MES,
            strftime(%Y, DATA_EVENTO) as ANO

from EVENTO

where ANO = :ANO

Depois de jogar os meses em outra combobox
Código:
 
SELECT DISTINCT(strftime(%d, DATA_EVENTO)) as DIA,
            strftime(%m, DATA_EVENTO) as MES,
            strftime(%Y, DATA_EVENTO) as ANO

from EVENTO

where ANO = :ANO and MES = :MES
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10490
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Sex Fev 28, 2020 7:13 am    Assunto: Responder com Citação

Você pode depois se quiser trabalhar com a propriedade Filter e OnFilterRecord que também consegue dar o resultado que você quer, só que virá para a tabela resultados da tabela que não há necessidade e com o filtro sql você já tem o resultado esperado.

Eis uma forma de usá-lo:
https://ainfo.cnptia.embrapa.br/digital/bitstream/CPPSE/15593/1/PROCIRFS2005.0004.PDF
Este acima dá para fazer o filtro por mês, muito fácil de fazer inclusive.

https://showdelphi.com.br/filtro-por-datas-no-clientdataset-delphi/


bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
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
Página 1 de 1

 
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