Campo Date no Delphi
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
Curtidas 0
Respostas
Rodrigo Mattos
05/11/2010
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.
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.
GOSTEI 0
Bruno Vba
05/11/2010
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:
Se puder me falar o que
estou fazendo de errado muito obrigado.
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.
GOSTEI 0
Frost
05/11/2010
Boa tarde
Bruno
Tente assim
Bruno
Tente assim
if FormatDateTime('yyyy',StrToDate(DbEdit.text)) < FormatDateTime('2010',Date) then
begin
ShowMessage('Ano menor do que o atual');
Exit;
GOSTEI 0
Bruno Vba
05/11/2010
Frost
Boa Tarde, também não deu certo quando digito a data, aparece um erro dizendo
que data não é valida.Obrigado.
Boa Tarde, também não deu certo quando digito a data, aparece um erro dizendo
que data não é valida.Obrigado.
GOSTEI 0
Compusoftware Ltda
05/11/2010
Ve o formato da data, que esta configurado no seu pc
GOSTEI 0
Bruno Vba
05/11/2010
Estou usando o Sql Server 2008 e o Formato de data é esse yyyy/MM/dd.Obrigado.
GOSTEI 0
Flavia Santos
05/11/2010
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;
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;
GOSTEI 0
Flavia Santos
05/11/2010
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;
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
GOSTEI 0
Bruno Vba
05/11/2010
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;GOSTEI 0
Flavia Santos
05/11/2010
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,
GOSTEI 0
Bruno Vba
05/11/2010
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.
GOSTEI 0
Flavia Santos
05/11/2010
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,
GOSTEI 0
Bruno Vba
05/11/2010
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.
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.
GOSTEI 0
Flavia Santos
05/11/2010
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,
GOSTEI 0
Bruno Vba
05/11/2010
Flavia meu Sql é Portugues, não achei nada parecido com Enterprise Manager.Obrigado.
GOSTEI 0