Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 43
1

Сравнение двух дат

14.06.2015, 07:06. Просмотров 2665. Ответов 40
Метки нет (Все метки)


Нужно сравнить две даты, первая берется из таблицы, вторая дата это текущая, написал код, выдает ошибку, подскажите
C++
1
CompareDate(Date(), ADOQuery2->FieldByName("Data")->AsDateTime
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2015, 07:06
Ответы с готовыми решениями:

Сравнение двух дат
Всем Доброго времени суток!!! Подскажите, пожалуйста, как сравнить 2 даты в формате "ДД.ММ.ГГГГ...

Сравнение дат
Добрый день. Существует ли функция для сравнения переменных типа DateTime? Т.е. у меня есть...

Сравнение дат
Подскажите пожалуйста как правильно сравнивать даты. Использую функцию DateUtils.hpp В Мемо1 есть...

Сравнение временного интервала(дат) с заданной
Приветствую всех, уважаемые форумчане! Заранее прошу простить, если это где-то уже решено(сам не...

40
Эксперт .NET
7522 / 5016 / 1194
Регистрация: 25.05.2015
Сообщений: 15,292
Записей в блоге: 14
14.06.2015, 08:45 2
Ну и какую же ошибку выдаёт?
0
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 43
14.06.2015, 09:52  [ТС] 3
Rius, в общем код такой
C++
1
2
3
4
5
6
if((CompareTime(Time(), ADOQuery2->FieldByName("Vremya_vyezda")->AsDateTime) *
           CompareTime(Time(), ADOQuery2->FieldByName("Vremya_vuyezda")->AsDateTime) > 0) &
           (CompareDate(Date(), ADOQuery2->FieldByName("Data"))))
        {
            ComboBox1->Items->Add(ADOQuery2->FieldByName("Nmesta")->AsString);
        }


а ошибка [bcc32 Error] Unit1.cpp(203): E2285 Could not find a match for 'CompareDate(TDateTime,TField *)'
Full parser context
Unit1.cpp(111): parsing: void _fastcall TForm1::Button3Click(TObject *)
0
Эксперт .NET
7522 / 5016 / 1194
Регистрация: 25.05.2015
Сообщений: 15,292
Записей в блоге: 14
14.06.2015, 09:54 4
C++
1
2
3
4
5
6
7
8
9
10
11
(
    CompareTime (
        Time(), ADOQuery2->FieldByName("Vremya_vyezda")->AsDateTime
    ) * CompareTime(
        Time(), ADOQuery2->FieldByName("Vremya_vuyezda")->AsDateTime
    ) > 0
) & (
    CompareDate(
        Date(), ADOQuery2->FieldByName("Data") // <<<<<<<<< тут чего-то не хватает ;)
    )
)
0
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 43
14.06.2015, 09:56  [ТС] 5
Rius, а чего?
0
Эксперт .NET
7522 / 5016 / 1194
Регистрация: 25.05.2015
Сообщений: 15,292
Записей в блоге: 14
14.06.2015, 09:59 6
Вы же программист? Сравните с аналогичными двумя строками выше.
0
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 43
14.06.2015, 10:12  [ТС] 7
Rius, если даже добавлять, все равно ошибка
0
Эксперт .NET
7522 / 5016 / 1194
Регистрация: 25.05.2015
Сообщений: 15,292
Записей в блоге: 14
14.06.2015, 10:21 8
Цитата Сообщение от Kolyamix Посмотреть сообщение
если даже добавлять, все равно ошибка
Что добавлять? Текст ошибки вам прямо говорит, что нет метода для сравнения TDateTime и TField.
0
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 43
14.06.2015, 10:59  [ТС] 9
Rius, я имею ввиду, если к ДАТЕ добавить ->AsDateTime, а что тогда написать ?
0
Эксперт .NET
7522 / 5016 / 1194
Регистрация: 25.05.2015
Сообщений: 15,292
Записей в блоге: 14
14.06.2015, 10:59 10
ADOQuery2->FieldByName("Data")->AsDateTime
0
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 43
14.06.2015, 11:06  [ТС] 11
Rius, я так и писал, все равно ошибка
0
Эксперт .NET
7522 / 5016 / 1194
Регистрация: 25.05.2015
Сообщений: 15,292
Записей в блоге: 14
14.06.2015, 11:07 12
Kolyamix, так и запишите. Потом скомпилируйте. Скопируйте сюда код как получился и текст ошибки.
0
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 43
14.06.2015, 11:12  [ТС] 13
[bcc32 Error] Unit1.cpp(201): E2015 Ambiguity between '_fastcall System:ateutils::CompareDate(const System::TDateTime,const System::TDateTime) at k:\xe3\program files\embarcadero\rad studio\10.0\include\windows\rtl\System.DateUtils.hpp:303' and '_fastcall Idglobal::CompareDate(const System::TDateTime,const System::TDateTime) at k:\xe3\program files\embarcadero\rad studio\10.0\include\windows\rtl\IdGlobal.hpp:710'
Full parser context
Unit1.cpp(111): parsing: void _fastcall TForm1::Button3Click(System::TObject *)


и такая [bcc32 Error] Unit1.cpp(201): E2379 Statement missing ;
Full parser context
Unit1.cpp(111): parsing: void _fastcall TForm1::Button3Click(TObject *)


но точки с запятой не должно там быть, вот
C++
1
2
3
4
5
6
 if((CompareTime(Time(), ADOQuery2->FieldByName("Vremya_vyezda")->AsDateTime) *
           CompareTime(Time(), ADOQuery2->FieldByName("Vremya_vuyezda")->AsDateTime) > 0)) &
          CompareDate(Date(), ADOQuery2->FieldByName("Data")->AsDateTime))
        {
            ComboBox1->Items->Add(ADOQuery2->FieldByName("Nmesta")->AsString);
        }
Добавлено через 3 минуты
вторую ошибку исправил, там скобка лишняя была, а первую не знаю как решить
0
Эксперт .NET
7522 / 5016 / 1194
Регистрация: 25.05.2015
Сообщений: 15,292
Записей в блоге: 14
14.06.2015, 11:16 14
Лучший ответ Сообщение было отмечено Kolyamix как решение

Решение

В первой написано, что компилятор не знает что выбрать. Вы хотите функцию CompareDate, а он видит две таких функции - System :: Dateutils::CompareDate и Idglobal::CompareDate.
Вызывайте явно нужную. Например
C++
1
Dateutils::CompareDate(Date(), ADOQuery2->FieldByName("Data")->AsDateTime)
И читайте что вам компилятор пишет.
0
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 43
14.06.2015, 11:21  [ТС] 15
Rius, спасибо, ошибка исчезла, но все равно не работает
0
Эксперт .NET
7522 / 5016 / 1194
Регистрация: 25.05.2015
Сообщений: 15,292
Записей в блоге: 14
14.06.2015, 11:25 16
Что не работает?
0
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 43
14.06.2015, 11:28  [ТС] 17
C++
1
2
3
4
5
6
7
8
9
10
while (!ADOQuery2->Eof)
    {
       if((CompareTime(Time(), ADOQuery2->FieldByName("Vremya_vyezda")->AsDateTime) *
           CompareTime(Time(), ADOQuery2->FieldByName("Vremya_vuyezda")->AsDateTime) > 0) &&
          (Idglobal::CompareDate(Date(), ADOQuery2->FieldByName("Data")->AsDateTime)))
        {
            ComboBox1->Items->Add(ADOQuery2->FieldByName("Nmesta")->AsString);
        }
        ADOQuery2->Next();
    }

мне кажется, что где-то что-то не так, программа должна считывать данные из поля время въезда, время выезда и дата, если они совпадают, то выполнять условие. А теперь как будто не видит 1 часть условия, а видит вторую
0
Эксперт .NET
7522 / 5016 / 1194
Регистрация: 25.05.2015
Сообщений: 15,292
Записей в блоге: 14
14.06.2015, 11:41 18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if
(
    (
        CompareTime(Time(), ADOQuery2->FieldByName("Vremya_vyezda")->AsDateTime)
        *
        CompareTime(Time(), ADOQuery2->FieldByName("Vremya_vuyezda")->AsDateTime)
         > 0
    )
    &&
    (
        Idglobal::CompareDate(Date(), ADOQuery2->FieldByName("Data")->AsDateTime)
    )
)
{
    ComboBox1->Items->Add(ADOQuery2->FieldByName("Nmesta")->AsString);
}
Поясните словами смысл умножения и сравнения с нулём, а также второе условие?

Добавлено через 1 минуту
Цитата Сообщение от Kolyamix Посмотреть сообщение
программа должна считывать данные из поля время въезда, время выезда и дата, если они совпадают
дата въезда равна дате выезда и равна текущей дате чтоль?
1
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 43
14.06.2015, 12:00  [ТС] 19
Rius, я наверно так не объясню, но уже почти все сделал, спасибо

Добавлено через 4 минуты
Rius, хотя еще есть вопрос, как сделать так: заполняется время 1 и время 2, и есть поле 1, потом при нажатии на кнопку из времени2 отнимается время1 и, если получившееся число меньше 5, то оно умножается на 60, если это число больше 5 и меньше 10, то умножается на 55 и т.д , потом уже получившееся число записывается в поле1?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30851 / 20176 / 7871
Регистрация: 22.10.2011
Сообщений: 35,025
Записей в блоге: 6
14.06.2015, 12:06 20
Цитата Сообщение от Rius Посмотреть сообщение
Поясните словами смысл умножения и сравнения с нулём
Проверка одинакового знака обоих результатов. Все прекрасно работало в предыдущей задаче, но ТС не задумывается над тем, что при изменении ТЗ нужно изменять код, он же выдает ТЗ кусочками, а не все сразу. Вот и пусть мучается теперь сам...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.06.2015, 12:06

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

Сравнение дат, представленных в текстовом виде
Есть мемо. В нем есть даты. Требуется найти наименьшую дату. Кто знает кроме массива что лучше?

Сравнение дат
Form1-&gt;ADOQuery1-&gt;Close(); Form1-&gt;ADOQuery1-&gt;SQL-&gt;Clear(); AnsiString zap3; zap3=&quot;Delete *...

Сравнение дат в указанном диапазоне
Добрый день! Сравнение отрабатывает не правильно, все перепробовал. Нужно чтобы прога выдала...

Сравнение двух дат и вывод дат находящихся между ними
Здравствуйте! Тут такое дело, вводятся две определенные ДАТЫ в Edit1 и Edit2 в формате...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.