locorj 0 Denunciar post Postado Fevereiro 28, 2005 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
Massuda 0 Denunciar post Postado Fevereiro 28, 2005 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
locorj 0 Denunciar post Postado Fevereiro 28, 2005 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
Massuda 0 Denunciar post Postado Fevereiro 28, 2005 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) thenLembre-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
locorj 0 Denunciar post Postado Fevereiro 28, 2005 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
locorj 0 Denunciar post Postado Março 2, 2005 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
locorj 0 Denunciar post Postado Março 2, 2005 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