Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка правильности даты, дата 
V
    Опции темы
alf138
Дата 14.3.2010, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Есть поле где нужно проверять правильность ввода даты, чтобы
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

PM MAIL   Вверх
volvo877
Дата 14.3.2010, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 9
Всего: 116



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

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

function TMainForm.DateCorrect(D: string): TDate;
var D1: Integer;
...
и убирает предупреждение...
PM MAIL   Вверх
alf138
Дата 14.3.2010, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Код

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

PM MAIL   Вверх
volvo877
Дата 14.3.2010, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 9
Всего: 116



Чего??? Какая такая ошибка? Нет ничего подобного:

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  untitled.PNG 17,44 Kb
PM MAIL   Вверх
alf138
Дата 14.3.2010, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Код

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

 ???
PM MAIL   Вверх
Данкинг
Дата 14.3.2010, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



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

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

 smile 



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
alf138
Дата 14.3.2010, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



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

Это сообщение отредактировал(а) alf138 - 14.3.2010, 12:38
PM MAIL   Вверх
Данкинг
Дата 14.3.2010, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Ну так я тебе написал функцию для проверки валидности даты.

Это сообщение отредактировал(а) Данкинг - 14.3.2010, 13:06


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
alf138
Дата 14.3.2010, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Код

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

Я не понял, объясните, пожалуйста.
PM MAIL   Вверх
Данкинг
Дата 14.3.2010, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Код

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



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Rrader
  Дата 14.3.2010, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 18
Всего: 191



Есть более удобная стандартная функция TryStrToDate.
Цитата(Help)

Description

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


Это сообщение отредактировал(а) Rrader - 14.3.2010, 15:37


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
alf138
Дата 14.3.2010, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Можно по подробнее а то я не могу совладать с этой функцией вроде и обьявил но пишет 
Код

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

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

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

PM MAIL   Вверх
Данкинг
Дата 14.3.2010, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



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

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

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

Ну или так. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
alf138
Дата 14.3.2010, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Все обьявил притом в самой процедуре находится и пишется 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;
Всем большое спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0545 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.