Fórum Campo Date no Delphi #390005

05/11/2010

0

  Pessoal estou precisando muito da ajuda de vocês, estou concluindo meu TCC, passei já, mas tenho que fazer algumas correções, uma delas é validar o campo data do meu cadastro de pedido, nela só posso aceitar o ano atual, e também o mês não pode ser mês que ja passou, um exemplo estou em novembro não pode aceitar outubro, um outro problema que estou tendo é que tenho que contar quantos pedidos foram feitos em tal mês, para eu poder montar um gráfico no DbChart, se alguém poder me ajudar, muito obrigado dês de já.
Bruno Vba

Bruno Vba

Responder

Posts

05/11/2010

Rodrigo Mattos

Amigo é muito simples as validações da data, primeiro a do ano:

  if FormatDateTime('yyyy',Campo da Data) < FormatDateTime('yyyy',Date) then
  begin
    ShowMessage('Ano menor do que o atual');
    Exit;
  end;

Depois a do Mês:

  if FormatDateTime('mm',Campo da Data) < FormatDateTime('mm',Date) then
  begin
    ShowMessage('Mês menor do que o atual');
    Exit;
  end;


Olha ja contar os pedidos você pode fazer um select, exemplo:


Select count(*) From TABELA



depois você pode colocar o parametro da data, filtrando apenas o mês.

Responder

Gostei + 0

05/11/2010

Bruno Vba

Rodrigo
primeiramente muito obrigado pela ajuda, mas não deu certo, não sei se estou
fazem errado fiz assim, no OnExit do meu DBEdit da Data fiz isso: 
 if FormatDateTime('yyyy',DbEdit.text) < FormatDateTime('2010',Date) then
  begin
    ShowMessage('Ano menor do que o atual');
    Exit;
  end;

 Se puder me falar o que
estou fazendo de errado muito obrigado.
Responder

Gostei + 0

05/11/2010

Frost

Boa tarde
Bruno

Tente assim


if FormatDateTime('yyyy',StrToDate(DbEdit.text)) < FormatDateTime('2010',Date) then
  begin
    ShowMessage('Ano menor do que o atual');
    Exit;

Responder

Gostei + 0

05/11/2010

Bruno Vba

Frost
Boa Tarde, também não deu certo quando digito a data, aparece um erro dizendo
que data não é valida.Obrigado.
Responder

Gostei + 0

05/11/2010

Compusoftware Ltda

Ve o formato da data, que esta configurado no seu pc
Responder

Gostei + 0

05/11/2010

Bruno Vba


Estou usando o Sql Server 2008 e o Formato de data é esse  yyyy/MM/dd.Obrigado.
Responder

Gostei + 0

14/11/2010

Flavia Santos

Tenta assim:

Declare a DateUtils na uses do seu form.

var Hoje, Mes: TDate; // A variavel Hoje salva a data atual e a Mes salva a data que consta no seu DBEdit.
begin

Hoje := MonthOf(now);
Mes := MonthOf(strtodate(DBEdit1.Caption));

    if Mes < Hoje then
    begin
       ShowMessage('mes menor do que o atual');
   end else
   if Mes = hoje then
   begin
      Showmessage ('Mes OK ');
   end else
   if (Mes > Hoje) then
   begin
       showmessage('Mes maior que o atual ');
   end;

end;
Responder

Gostei + 0

14/11/2010

Flavia Santos

Tenta assim:

Declare a DateUtils na uses do seu form.

var Hoje, Mes: TDate; // A variavel Hoje salva a data atual e a Mes salva a data que consta no seu DBEdit.
begin

Hoje := MonthOf(now);
Mes := MonthOf(strtodate(DBEdit1.Caption));

    if Mes < Hoje then
    begin
       ShowMessage('mes menor do que o atual');
   end else
   if Mes = hoje then
   begin
      Showmessage ('Mes OK ');
   end else
   if (Mes > Hoje) then
   begin
       showmessage('Mes maior que o atual ');
   end;

end;


Corrigindo:

Na linha Mes := MonthOf(strtodate(DBEdit1.Caption));
O correto é Mes := MonthOf(strtodate(DBEdit1.Text));

Passa a estrutura da sua tabela de pedidos para que possamos ajudá-lo na criação do select.

flw
Responder

Gostei + 0

15/11/2010

Bruno Vba

Flavia Muito Obrigado Pela ajuda, e a todos que ajudara aqui, com ajuda do primeiro colega que postou consegui resolver o problema da seguinte forma, antes de mais nada mudei no banco data de Entrega de  date para varchar(11) e usei esse codigo:
procedure TFrmPedido.DateTimePicker1Exit(Sender: TObject);begin  inherited;DM.CdsPedidodataEntrega.Value := DatetoStr((DateTimePicker1.Date));
  try    if StrToDate(FormatDateTime ('dd/mm/yyyy',StrToDate(DM.CdsPedidodataEntrega.Value))) < StrToDate(FormatDateTime('dd/mm/yyyy', now)) then    begin      Application.MessageBox('Data Incorreta. Por Favor verifique.','Alerta',MB_ok +      MB_defbutton1 + MB_iconexclamation);      DateTimePicker1.SetFocus;      abort;    end;    BtnSalvar.click;  except    //ShowMessage('Data Incorreta, Favor Verificar');    DateTimePicker1.SetFocus;  end;
Responder

Gostei + 0

15/11/2010

Flavia Santos

Flavia Muito Obrigado Pela ajuda, e a todos que ajudara aqui, com ajuda do primeiro colega que postou consegui resolver o problema da seguinte forma, antes de mais nada mudei no banco data de Entrega de  date para varchar(11) e usei esse codigo:
procedure TFrmPedido.DateTimePicker1Exit(Sender: TObject);begin  inherited;DM.CdsPedidodataEntrega.Value := DatetoStr((DateTimePicker1.Date));
  try    if StrToDate(FormatDateTime ('dd/mm/yyyy',StrToDate(DM.CdsPedidodataEntrega.Value))) < StrToDate(FormatDateTime('dd/mm/yyyy', now)) then    begin      Application.MessageBox('Data Incorreta. Por Favor verifique.','Alerta',MB_ok +      MB_defbutton1 + MB_iconexclamation);      DateTimePicker1.SetFocus;      abort;    end;    BtnSalvar.click;  except    //ShowMessage('Data Incorreta, Favor Verificar');    DateTimePicker1.SetFocus;  end;


Bruno,

Eu não aconselharia vc a mudar o tipo de campo de Date para VarChar.

A função MonthOf da Unit DateUtils serve exatamente para extrair o mes de uma data, assim vc pode fazer a comparação que desejar de forma simples e rápida. Sem contar que o seu código fica mais limpo.

Isso sem mencionar que se vc alterar o campo de Date para Varchar e o tiver utilizado como parametro em rotinas em relatorios, graficos, ou ate mesmo formularios de consulta, vc tera que atualizar estes locais incluindo o StrToDate para não gerar nenhum bug's no sistema. Se vc o utilizou em um ou dois formularios é fácil, mas se tiver utiliza em varios ai o trabalho vai ser maior ainda.

flw,
Responder

Gostei + 0

15/11/2010

Bruno Vba


  Flavia, mudei para varchar(11), pois estava tendo problemas com o formato date do Sql Server, sabe, e essa data só estou usando mesmo no pedido.Muito Obrigado pelas dicas.
Responder

Gostei + 0

15/11/2010

Flavia Santos


  Flavia, mudei para varchar(11), pois estava tendo problemas com o formato date do Sql Server, sabe, e essa data só estou usando mesmo no pedido. Muito Obrigado pelas dicas.


Bruno,

Qual versão do SQL Server você está usando?
Parei de usar o SQL Server a cerca de um ano, mas eu sempre utilizava a data formatada da seguinte forma: MM/DD/YYYY

Mas para ter certeza de como manipular a data de forma correta, vá em painel de controle -> opções regionais e de idioma e veja como está formatada a data no seu computador.

Utilize este mesmo formato na sua codificação e veja se funciona.

flw,
Responder

Gostei + 0

15/11/2010

Bruno Vba

Flavia
utilizo o Sql Server 2008, o formato de data nas opções regionais esta
assim 15/11/2010 normal, mas no meu Sql Server esta de forma
invertida.Obrigado.
Responder

Gostei + 0

15/11/2010

Flavia Santos


mso-bidi-font-family:"Times New Roman";color:black;mso-fareast-language:PT-BR">Flavia
utilizo o Sql Server 2008, o formato de data nas opções regionais esta
assim 15/11/2010 normal, mas no meu Sql Server esta de forma
invertida.Obrigado.


Bruno,

Não estou com o SQL Server aqui, então vou falar mais ou menos pelo que me lembre, vê se consegue achar esta opção ai, se não conseguir eu procuro o cd e instalo para auxilia-lo melhor, ok?

Acesse o Enterprise Manager
Clique em Microsoft SQL Servers
Clique agora em SQL Server Group
Agora clique com o botão direito em cima da sua conexão e clique em Propriedades
Na tela que abrir clique em Server Settings
Nesta opção irá listar o Default language for user - é neste local que está a linguagem que esta sendo utilizado.
Se não me engano a Language Portuguese trabalha da seguinte forma: DDMMYYYY e a English desta outra forma MMDDYYYY
As languages que trabalham com o formato yyyymmdd são a Japanese, a croatian e algumas outras que não lembro agora.

flw,

Responder

Gostei + 0

15/11/2010

Bruno Vba

Flavia meu Sql é Portugues, não achei nada parecido com Enterprise Manager.Obrigado.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar