Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.05.2010, 20:59
Nepomnu Nepomnu вне форума
Прохожий
 
Регистрация: 28.05.2010
Сообщения: 2
Репутация: 10
По умолчанию Разница между датами в днях

Здравствуйте!
Пишу БД которая будет контролировать работу библиотеки, прием-сдачу книг и т.д.
Подскажите кто-нибудь пожалуйста, как мне посчитать разницу в днях между двумя датами.

forma.jpg

Нужно что бы высчитывала должников, т.е. посчитала разницу между датой выдачи книги и датой сдачи и если разница больше чем в 31 день то выдавала информацию о задолженности.
Ответить с цитированием
  #2  
Старый 28.05.2010, 21:26
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

type TDateTime = type Double;
целая часть = кол-во дней от 12/30/1899
т.е. разница между двумя этими "типами" и есть кол-во дней
Ответить с цитированием
  #3  
Старый 29.05.2010, 01:27
windaws windaws вне форума
Начинающий
 
Регистрация: 28.08.2009
Сообщения: 116
Репутация: 10
По умолчанию

Trunc(Date_1) - Trunc(Date_2) - показывает разницу между датами в днях, использовал в своей программе для сравнения такой метод
Ответить с цитированием
  #4  
Старый 29.05.2010, 07:20
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 636
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Код:
uses
  DateUtils;

Код:
function DaysBetween(const ANow, AThen: TDateTime): Integer;
Количество дней между двумя датами
Ответить с цитированием
  #5  
Старый 29.05.2010, 15:07
Nepomnu Nepomnu вне форума
Прохожий
 
Регистрация: 28.05.2010
Сообщения: 2
Репутация: 10
По умолчанию

Спасибо за советы, но ничего не получается
Как мне воспользоваться функцией Trunc?
У меня таблица называется TOperation поля расчета 'DataReturn' и 'DataDelivery', выводить значение должен в третье поле 'Debtor', как это должно выглядеть в программе?
Ответить с цитированием
  #6  
Старый 29.05.2010, 18:57
windaws windaws вне форума
Начинающий
 
Регистрация: 28.08.2009
Сообщения: 116
Репутация: 10
По умолчанию

Цитата:
Сообщение от Nepomnu
Спасибо за советы, но ничего не получается
Как мне воспользоваться функцией Trunc?
У меня таблица называется TOperation поля расчета 'DataReturn' и 'DataDelivery', выводить значение должен в третье поле 'Debtor', как это должно выглядеть в программе?
if Trunc(DataReturn) - Trunc(DataDelivery) > 31 then полю debtor присваевается количество дней или значения, смотря что нужно
Ответить с цитированием
  #7  
Старый 31.05.2010, 11:02
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

База на чем?
Доступ к базе через что?
Ответить с цитированием
  #8  
Старый 31.05.2010, 14:20
Аватар для Mad programmer
Mad programmer Mad programmer вне форума
Прохожий
 
Регистрация: 11.05.2010
Сообщения: 23
Репутация: 10
По умолчанию

Nepomnu Попробуй так.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 myYear, myMonth, myDay : Word;
 myHour, myMin, mySec, myMilli : Word;

 myYear_, myMonth_, myDay_ : Word;
 myHour_, myMin_, mySec_, myMilli_ : Word;

 Raznica:word;
begin
try
            DecodeDateTime(DataDelivery {значение поля},myYear, myMonth, myDay,
                         myHour, myMin, mySec, myMilli);
            DecodeDateTime(DataReturn {значение поля} ,myYear_, myMonth_, myDay_,
                         myHour_, myMin_, mySec_, myMilli_);
    //Если один месяц
    //предположительно что год тоже один и тот же
    if myMonth=myMonth_ then
       Raznica:= myDay_-myDay; //разница в днях

//Ну думаю для разных месяцев сам допишешь

Except
  MessageDlg('Ошибка.',mtError,[mbOK],0);
end;
end;
Admin: Пользуемся тегами!

Последний раз редактировалось Admin, 31.05.2010 в 18:02.
Ответить с цитированием
  #9  
Старый 31.05.2010, 15:32
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Создаем calc поле в компоненте table
в свойстве вычесления калс поля пишем что то типа этого:

Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var i:real;
begin
  i:=(DateTimePicker2.Date-DateTimePicker1.Date);
  if (round(i)>31) then label1.Caption:='Просроченно'
  else label1.Caption:='Ok'
end;

ПС. просто пример разобрать его вполне просто.

Далее в грид добавляем это поле:
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:27.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2020

ВКонтакте   Facebook   Twitter