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 

Como fazer filtro data usando o DateTimePicker? [RESOLVIDO]

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


Registrado: Terça-Feira, 16 de Setembro de 2014
Mensagens: 90

MensagemEnviada: Sex Out 17, 2014 1:21 am    Assunto: Como fazer filtro data usando o DateTimePicker? [RESOLVIDO] Responder com Citação

como fazer filtro com data usando o DateTimePicker?

Estou usando o Delphi 7 e Interbase 6.5.

tentei assim não deu:


Código:
DataModule_01.DataSet_Clientes.Close;
DataModule_01.DataSet_Clientes.SelectSQL.Clear;
DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes where cli_data_cadastro >=' +#39+ DateToStr(DateTimePicker1.Date) +#39+ 'and cli_data_cadastro <= ' +#39+ DateToStr(DateTimePicker2.Date) +#39) ;
DataModule_01.DataSet_Clientes.Open;


Editado pela última vez por narba em Seg Out 20, 2014 9:47 am, num total de 2 vezes
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
MarlonDelphi
Aprendiz
Aprendiz


Registrado: Domingo, 5 de Janeiro de 2014
Mensagens: 117

MensagemEnviada: Sex Out 17, 2014 8:45 am    Assunto: Responder com Citação

Aconselho voce fazer utilizando parametros. Assim:

Código:

DataModule_01.DataSet_Clientes.Close;
DataModule_01.DataSet_Clientes.SelectSQL.Clear;
DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes where cli_data_cadastro >= :data1 and cli_data_cadastro <= :data2') ;
DataModule_01.DataSet_Cliente.ParamByName('data1').asdate := DateTimePicker1.Date;   
DataModule_01.DataSet_Cliente.ParamByName('data2').asdate := DateTimePicker2.Date;   
DataModule_01.DataSet_Clientes.Open;

Pesquise sobre Parametros que tenho certeza que vai sanar o seu problema.

Abraços.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
narba
Novato
Novato


Registrado: Terça-Feira, 16 de Setembro de 2014
Mensagens: 90

MensagemEnviada: Sex Out 17, 2014 9:29 am    Assunto: Responder com Citação

Deu certo, muito obrigado Very Happy Very Happy Very Happy .

Quem sabe vc tambem possa me ajudar em outra questao.
Nao sei se fiz errado mais eu fiz um RadioGroup para filtro e outro para ordenação.

Mais quando eu escolho um filtro tipo pessoa fisica e depois ordenação , o filtro sai. Dai estou tentando pensar como fazer para o filtro nao sair. Alguma susgetao?

Código:

procedure Tform_consulta_clientes.RadioGroup_FiltroClick(Sender: TObject);
begin

if RadioGroup_Filtro.ItemIndex = 0 then
begin
Label_datainicial.Visible:=false;
label_datafinal.Visible:=false;
DateTimePicker1.Visible:=false;
DateTimePicker2.Visible:= false;

DataModule_01.DataSet_Clientes.Close;
DataModule_01.DataSet_Clientes.SelectSQL.Clear;
DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes where cli_pessoa = ' +#39+'Física'+#39) ;
DataModule_01.DataSet_Clientes.Open;

end;

if RadioGroup_Filtro.ItemIndex = 1 then
begin
Label_datainicial.Visible:=false;
label_datafinal.Visible:=false;
DateTimePicker1.Visible:=false;
DateTimePicker2.Visible:= false;

DataModule_01.DataSet_Clientes.Close;
DataModule_01.DataSet_Clientes.SelectSQL.Clear;
DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes where cli_pessoa = ' +#39+'Jurídica'+#39) ;
DataModule_01.DataSet_Clientes.Open;

end;

if RadioGroup_Filtro.ItemIndex = 2 then
begin
Label_datainicial.Visible:=true;
label_datafinal.Visible:=true;
DateTimePicker1.Visible:=true;
DateTimePicker2.Visible:= true;


end;

if RadioGroup_Filtro.ItemIndex = 3 then
begin
Label_datainicial.Visible:=true;
label_datafinal.Visible:=true;
DateTimePicker1.Visible:=true;
DateTimePicker2.Visible:= true;
end;

if RadioGroup_Filtro.ItemIndex = 4 then
begin
Label_datainicial.Visible:=false;
label_datafinal.Visible:=false;
DateTimePicker1.Visible:=false;
DateTimePicker2.Visible:= false;

DataModule_01.DataSet_Clientes.Close;
DataModule_01.DataSet_Clientes.SelectSQL.Clear;
DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes') ;
DataModule_01.DataSet_Clientes.Open;

end;
end;

//############################################################################
//
procedure Tform_consulta_clientes.RadioGroup_OrdenacaoClick(
  Sender: TObject);
begin

  if RadioGroup_Ordenacao.ItemIndex = 0 then
  begin
  DataModule_01.DataSet_Clientes.Close;
  DataModule_01.DataSet_Clientes.SelectSQL.Clear;
  DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes order by cli_nome');
  DataModule_01.DataSet_Clientes.Open;
  end;

  if RadioGroup_Ordenacao.ItemIndex = 1 then
  begin
  DataModule_01.DataSet_Clientes.Close;
  DataModule_01.DataSet_Clientes.SelectSQL.Clear;
  DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes order by cli_razao_social');
  DataModule_01.DataSet_Clientes.Open;
  end;

  if RadioGroup_Ordenacao.ItemIndex = 2 then
  begin
  DataModule_01.DataSet_Clientes.Close;
  DataModule_01.DataSet_Clientes.SelectSQL.Clear;
  DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes order by cli_nome_fantasia');
  DataModule_01.DataSet_Clientes.Open;
  end;

  if RadioGroup_Ordenacao.ItemIndex = 3 then
  begin
  DataModule_01.DataSet_Clientes.Close;
  DataModule_01.DataSet_Clientes.SelectSQL.Clear;
  DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes order by cli_data_cadastro');
  DataModule_01.DataSet_Clientes.Open;
  end;

  if RadioGroup_Ordenacao.ItemIndex = 4 then
  begin
  DataModule_01.DataSet_Clientes.Close;
  DataModule_01.DataSet_Clientes.SelectSQL.Clear;
  DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes order by cli_data_registro_nire');
  DataModule_01.DataSet_Clientes.Open;
  end;

  if RadioGroup_Ordenacao.ItemIndex = 5 then
  begin
  DataModule_01.DataSet_Clientes.Close;
  DataModule_01.DataSet_Clientes.SelectSQL.Clear;
  DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes order by cli_ultima_alteracao');
  DataModule_01.DataSet_Clientes.Open;
  end;


    if RadioGroup_Ordenacao.ItemIndex = 6 then
  begin
  DataModule_01.DataSet_Clientes.Close;
  DataModule_01.DataSet_Clientes.SelectSQL.Clear;
  DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes');
  DataModule_01.DataSet_Clientes.Open;
  end;

end;


Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Sex Out 17, 2014 9:30 am    Assunto: Responder com Citação

Se não for utilizar parâmetros, utilize o comando QuotedStr para concatenar a String do SQL.

Código:

  With DataModule_01.DataSet_Clientes do
  Begin
  Close;
  SelectSQL.Clear;
  SelectSQL.Add('select * from clientes');
  SelectSQL.Add(' where cli_data_cadastro >= ' + QuotedStr(DateToStr(DateTimePicker1.Date)));
  SelectSQL.Add(' and cli_data_cadastro <= ' + QuotedStr(DateToStr(DateTimePicker2.Date)));
  Open;
  End;

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
MarlonDelphi
Aprendiz
Aprendiz


Registrado: Domingo, 5 de Janeiro de 2014
Mensagens: 117

MensagemEnviada: Sex Out 17, 2014 10:04 am    Assunto: Responder com Citação

Narba, nao sei se entendi muito bem mas, vou tentar te ensinar uma coisa pra "limpar" seu código.

Você nao precisa em todo momento fechar sua query, limpar seu sql, adicionar sql e depois abrir, trabalhe com IF e parametros sempre, isso facilitará sua vida para todo o sempre, vou tentar mostrar melhor:

Código:

procedure Tform_consulta_clientes.RadioGroup_FiltroClick(Sender: TObject);
begin

//ESPERO QUE VOCE SAIBA O QUE O WITH DO FAÇA. CASO NAO SAIBA VOU TE FALAR. TUDO QUE ESTÁ ABAIXO DESTE BEGIN FARÁ PARTE (SE VOCE QUIZER) DO DATAMODULE_01, OU SEJA, EU NAO PRECISO COLOCAR DATAMODULE_01.DATASET_CLIENTES.CLOSE, EU SIMPLESMENTE COLOCO DATASET_CLIENTES.CLOSE PORQUE AUTOMATICAMENTE ELE FAZ PARTE DO DATAMODULE, SACOU?

with DataModule_01.DataSet_Clientes do
begin
//Perceba que independente da condição, minha query vai estar fechada e o SQL vai estar limpo. Agora só faça as condiçoes e adicione o SQL
DataSet_Clientes.Close;
DataSet_Clientes.SelectSQL.Clear;
//Desative tudo e ativo somente quando necessário, parece ser melhor para o seu caso, analise o código todo
Label_datainicial.Visible:=false;
label_datafinal.Visible:=false;
DateTimePicker1.Visible:=false;
DateTimePicker2.Visible:= false;

if RadioGroup_Filtro.ItemIndex = 0 then
begin

DataSet_Clientes.SelectSQL.Add('select * from clientes where cli_pessoa = :fisica') ;
DataSet_Clientes.ParamByName('fisica').asString := '#39' + 'Física' + '#39';
end;

if RadioGroup_Filtro.ItemIndex = 1 then
begin

DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes where cli_pessoa = :juridica') ; 
DataSet_Clientes.ParamByName('juridica').asString := '#39' + 'Jurídica' + '#39';
end; 

if RadioGroup_Filtro.ItemIndex = 2 then
begin
Label_datainicial.Visible:=true;
label_datafinal.Visible:=true;
DateTimePicker1.Visible:=true;
DateTimePicker2.Visible:= true;
end;

if RadioGroup_Filtro.ItemIndex = 3 then
begin
Label_datainicial.Visible:=true;
label_datafinal.Visible:=true;
DateTimePicker1.Visible:=true;
DateTimePicker2.Visible:= true;
end;

if RadioGroup_Filtro.ItemIndex = 4 then
begin
 
DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes') ;

end;
DataSet_Clientes.Open;
// PERCEBA QUE EU FIZ TODAS AS MINHAS CONDIÇÕES E SÓ DEPOIS EU ABRI MINHA QUERY.
end; // Fechamento do WITH
end; //Fechamento do RadioGroup_FiltroClick
//############################################################################

AGORA USE ESTE CONCEITO E APLIQUE PARA SUA ORDENAÇÃO
É claro que se der algum erro neste exemplo que tentei te mostrar, pense um pouco e corrija da melhor maneira.
Uma coisa que vou te ensinar: "Quanto maior o código menor a lógica". Procure fazer seus códigos com o menor código possível e você será um excepcional programador e irá se destacar.

ABRAÇOS, ESPERO TER AJUDADO
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
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