Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Проверка правильности даты


Автор: alf138 14.3.2010, 07:50
Есть поле где нужно проверять правильность ввода даты, чтобы
1. Число было не больше 31
2.Месяц не больше 12
3.Год реальный.
пытался
Код

function TMainForm.DateCorrect(D: string): TDate;
var D1:Byte;
begin
D1:=StrToInt(FormatDateTime('YY',StrToDate(D)));{берем 2 последние цифры из года}
if (D1>=00) and (D1<=09) then {если не >=2000 и <=2009 то возврашаем как есть}
  Result:=StrToDate(FormatDateTime('DD.MM.YYYY',StrToDate(D)))
else {иначе ставим 19 и год}
Result:=StrToDate(FormatDateTime('DD.MM.19YY',StrToDate(D)));
end;

но вылазит ошибка на условие if
Код

[Warning] Unit2.pas(104): Comparison always evaluates to True

Автор: volvo877 14.3.2010, 10:39
Цитата(alf138 @  14.3.2010,  06:50 Найти цитируемый пост)
но вылазит ошибка на условие if
Во-первых, не ошибка, а предупреждение. Это разные вещи.

А во-вторых - хочешь избавиться от предупреждения - используй правильные типы. StrToInt возвращает Integer, а не Byte, правда? Вот 
Код

function TMainForm.DateCorrect(D: string): TDate;
var D1: Integer;
...
и убирает предупреждение...

Автор: alf138 14.3.2010, 11:10
Код

[Error] Unit2.pas(104): Incompatible types: 'Boolean' and 'TDateTime'

Автор: volvo877 14.3.2010, 11:39
Чего??? Какая такая ошибка? Нет ничего подобного:

Автор: alf138 14.3.2010, 11:56
Код

('YY',StrToDate(Form2.rojden.Text)))

 ???

Автор: Данкинг 14.3.2010, 11:57
А зачем так сложно делать проверку даты на правильность (судя по заданию, требуется сделать именно это)? Не проще так:
Код

function TMainForm.DateCorrect(D: string): Boolean;
var ddd:tdatetime;
begin
 result:=false;
 try
 ddd:=strtodate(d);
 result:=true;
 except
 end;
end;

 smile 

Автор: alf138 14.3.2010, 12:38
по сути у меня поле заданно data и при записи туда не корректного значения программы вылетает, нужно сделать проверку что она выдавала проверку а не выкидывало полностью. 

Автор: Данкинг 14.3.2010, 13:06
Ну так я тебе написал функцию для проверки валидности даты.

Автор: alf138 14.3.2010, 14:21
Код

function P7 : Boolean;
var ddd:tdatetime; D: string;
begin
 result:=false;
 try
 ddd:=strtodate(Form3.rojden.Text);
 result:=true;
 except
 end;
 if result=true...

Я не понял, объясните, пожалуйста.

Автор: Данкинг 14.3.2010, 14:40
Код

if DateCorrect('31.02.2010') then showmessage('Корректная))))') else showmessage('Некорректная((((');

Автор: Rrader 14.3.2010, 15:37
Есть более удобная стандартная функция TryStrToDate.
Цитата(Help)

Description

Call TryStrToDate to parse a string that specifies a date. If S does not contain a valid date, TryStrToDate returns false. 

Автор: alf138 14.3.2010, 15:55
Можно по подробнее а то я не могу совладать с этой функцией вроде и обьявил но пишет 
Код

[Error] Unit3.pas(69): Undeclared identifier: 'DateCorrect'

хотел было в самой ей проверять и передовать значения тоже что то не получается
Код

result:=true;
 except
 end;
 If DateCorrect (Form3.rojden.text) then
C:=True
else C:=False;

Автор: Данкинг 14.3.2010, 17:37
Цитата(alf138 @  14.3.2010,  15:55 Найти цитируемый пост)
вроде и обьявил

Так вроде или объявил? Если объявил - такой ошибки быть не должно.

Цитата(Rrader @  14.3.2010,  15:37 Найти цитируемый пост)
TryStrToDate

Ну или так. smile 

Автор: alf138 14.3.2010, 17:42
Все обьявил притом в самой процедуре находится и пишется DateCorrect, а вот за ней не как. Обьявил, если бы не обьявил он бы не запускался.

Добавлено через 12 минут и 53 секунды
Все нашол 
Код

var d:TDateTime;
begin
 ShortDateFormat:='dd/mm/yy';
 if not TryStrToDate(Edit1.Text,d) then begin
  ShortDateFormat:='dd-mm-yy';
  if not TryStrToDate(Edit1.Text,d) then begin
   ShortDateFormat:='dd.mm.yy';
   Caption:='Несовпадает'; exit;
  end;
 end;
    Caption:='Совпадает';
end;
Всем большое спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)