Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

locorj

Código para validar data

Recommended Posts

Fala galera fiz esse código pra validar data... mas o que está errado nele ?? ele para no primeiro no segundo if acho que ñ estou sabendo trabalhar com o val... alguém pode me dar uma ajuda !!!?? if Trim(camosentrada.Text) = '' then begin end else begin if val ((AnsiLeftStr(camosentrada.text,2))) > 31 and (val ((AnsiMidStr(camosentrada.text,2,2))) > 12) then begin messagebox (Handle,'Data Inválida, digite no formato DD/MM/YYYY','Aviso do sistema',MB_OK+MB_ICONINFORMATION); camosentrada.Clear; camosentrada.SetFocus; end else begin if val ((AnsiRightStr(camosentrada.text,4)))mod 4 <> 0 and (val ((AnsiMidStr(camosentrada.text,2,2)))=2) and (val ((AnsiLeftStr(camosentrada.text,2))) = 28)then begin messagebox (Handle,'Data Inválida','Aviso do sistema',MB_OK+MB_ICONINFORMATION); camosentrada.Clear; camosentrada.SetFocus; end else begin if val ((AnsiMidStr(camosentrada.text,2,2)))mod 2 <> 0 and (val ((AnsiLeftStr(camosentrada.text,2))) = 30) then begin messagebox (Handle,'Data Inválida','Aviso do sistema',MB_OK+MB_ICONINFORMATION); camosentrada.Clear; camosentrada.SetFocus; end else begin if val ((AnsiMidStr(camosentrada.text,2,2)))mod 2 =0 and (val ((AnsiLeftStr(camosentrada.text,2))) = 31) then begin messagebox (Handle,'Data Inválida','Aviso do sistema',MB_OK+MB_ICONINFORMATION); camosentrada.Clear; camosentrada.SetFocus; end else begin end; end; end; end; end;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Do que usar Val, use StrToInt ou StrToIntDef, funções definidas na unit SysUtils.

 

Seu código está tentando validar ao dia, mês e ano... Uma alternativa seria tentar converter o conteúdo de camosentrada.txt para TDate usando StrToDate.

var  Data: TDateTime; // ou TDate  DataVálida: Boolean;...  try    Data := StrToDate(camosentrada.txt);    DataValida := True;  except    DataValida := False;  end;  if DataValida then    // processa a data, etc  else begin    MessageDlg('Data inválida', mtError, [mbOK]);    camosentrada.Clear;    camosentrada.SetFocus;    ....  end;
Ou, para ser mais preguiçoso, usar um TDateTimePicker (da aba Win32) para pegar a data.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o TDateTimePicke ñ pode ser pq é um dbedit... a ñ ser que eu transforme... mas esse código é + simples do que fazer isso.... eu queria fazer com o meu pq está no formado DD/MM/YYYY... sem precisar trocar no windows...Substitui o val por StrToIntDef e StrToInt e nda... ñ rolou...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parece que você está pegando errado a posição do mês... se sua string deveria estar no formato DD/MM/YYYY, então o mês ocupa dois caracteres a partir da posição 4:

if val ((AnsiLeftStr(camosentrada.text,2))) > 31 and (val ((AnsiMidStr(camosentrada.text,4,2))) > 12) then
Lembre-se que Trim, AnsiLeftStr, AnsiMidStr e AnsiRightStr não afetam a string original (camosentrada.text).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem um erro na hora de pegar o mês.... mas ele apartir do 3 caracter e pega 2, só substituir o primeiro 2 que que vem anstes do AnsiMidStr... obrigadoMas eu ñ quero que ela seja afetada de forma alguma.... apenas que ela seja "analizada".Não to entendendo.... ainda assim para no segundo if !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala galera percebi que o erro está no and do if então resolvi fazer de forma diferente... mas ainda tá dando erro parece que sobra ou falta end mas já analizei várias vezes e ñ consigo ver o erro... ai vai o código.if Trim(camosentrada.Text) = '' thenbeginendelsebeginif StrToInt (copy(camosentrada.text,1,2)) > 31 thenbeginmessagebox (Handle,'Data Inválida, digite no formato DD/MM/YYYY','Aviso do sistema',MB_OK+MB_ICONINFORMATION);camosentrada.Clear;camosentrada.SetFocus;endelsebeginif StrToInt (copy(camosentrada.text,3,2)) > 12 thenbeginmessagebox (Handle,'Data Inválida, digite no formato DD/MM/YYYY','Aviso do sistema',MB_OK+MB_ICONINFORMATION);camosentrada.Clear;camosentrada.SetFocus;endelsebeginif StrToInt (copy(camosentrada.text,3,2))= 2 thenbeginif StrToInt (copy(camosentrada.text,5,4))mod 4 <> 0 thenbeginif StrToInt (copy(camosentrada.text,1,2)) = 28 thenbeginmessagebox (Handle,'Data Inválida','Aviso do sistema',MB_OK+MB_ICONINFORMATION);camosentrada.Clear;camosentrada.SetFocus;end;end;elsebeginif StrToInt (copy(camosentrada.text,3,2)) < 7 thenbeginif StrToInt (copy(camosentrada.text,3,2))mod 2 = 0 thenbeginif StrToInt(copy(camosentrada.text,2)) = 31 thenbeginmessagebox (Handle,'Data Inválida','Aviso do sistema',MB_OK+MB_ICONINFORMATION);camosentrada.Clear;camosentrada.SetFocus;end;end;elsebeginif StrToInt (copy(camosentrada.text,3,2)) > 7 thenbeginif StrToInt (copy(camosentrada.text,3,2))mod 2 <> 0 thenbeginif StrToInt (copy(camosentrada.text,2)) = 31 thenbeginmessagebox (Handle,'Data Inválida','Aviso do sistema',MB_OK+MB_ICONINFORMATION);camosentrada.Clear;camosentrada.SetFocus;end;end;end;end;end;end;end;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido o problema ai vai o código com ela funcionando perfeitamenteif Trim(camosentrada.Text) = '' thenbeginendelsebeginif StrToInt (copy(camosentrada.text,1,2)) > 31 thenbeginmessagebox (Handle,'Data Inválida, digite no formato DD/MM/YYYY','Aviso do sistema',MB_OK+MB_ICONINFORMATION);camosentrada.Clear;camosentrada.SetFocus;endelsebeginif StrToInt (copy(camosentrada.text,3,2)) > 12 thenbeginmessagebox (Handle,'Data Inválida, digite no formato DD/MM/YYYY','Aviso do sistema',MB_OK+MB_ICONINFORMATION);camosentrada.Clear;camosentrada.SetFocus;endelsebeginif StrToInt (copy(camosentrada.text,3,2))= 2 thenbeginif StrToInt (copy(camosentrada.text,5,4))mod 4 <> 0 thenbeginif StrToInt (copy(camosentrada.text,1,2)) = 28 thenbeginmessagebox (Handle,'Data Inválida','Aviso do sistema',MB_OK+MB_ICONINFORMATION);camosentrada.Clear;camosentrada.SetFocus;end;endelsebeginif StrToInt (copy(camosentrada.text,3,2)) < 7 thenbeginif StrToInt (copy(camosentrada.text,3,2))mod 2 = 0 thenbeginif StrToInt(copy(camosentrada.text,2)) = 31 thenbeginmessagebox (Handle,'Data Inválida','Aviso do sistema',MB_OK+MB_ICONINFORMATION);camosentrada.Clear;camosentrada.SetFocus;end;endelsebeginif StrToInt (copy(camosentrada.text,3,2)) > 7 thenbeginif StrToInt (copy(camosentrada.text,3,2))mod 2 <> 0 thenbeginif StrToInt (copy(camosentrada.text,2)) = 31 thenbeginmessagebox (Handle,'Data Inválida','Aviso do sistema',MB_OK+MB_ICONINFORMATION);camosentrada.Clear;camosentrada.SetFocus;end;end;end;end;end;end;end;end;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.