Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2018, 15:06   #1
Alex_pro_0
Новичок
Джуниор
 
Регистрация: 20.06.2018
Сообщений: 2
По умолчанию Робота с датами в DBGrid - Delphi БД

Есть БД dw.mdb acces в ней таблица Malozab в таблице поле t_dovidku_po в котором хранится срок действия окончания справки (пример 24.06.2018) . Нужно что бы например за 30 дней до окончания срока закрасилась строка с этой датой в желтый или красный цвет , или же вывелось какое нибудь уведомление . Я сделал что то похожее но работает оно не так как нужно . БД подключена с помощью ADOConnection и ADOQuery.

Код:
procedure TmalozabForm.sDBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if ( Date - DataModule1.QMalozab.FieldByName('t_dovidku_po').AsDateTime) < 30 then
begin
  malozabForm.sDBGrid1.Canvas.Brush.Color:=clyellow;
  malozabForm.sDBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Alex_pro_0 вне форума Ответить с цитированием
Старый 25.06.2018, 07:05   #2
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Скажите , что именно работает не так как нужно. Я как Ванга с опытом подумал, что дата рассчитывается не верно.
Код:
try
  StrToDate(DataModule1.QMalozab.FieldByName('t_dovidku_po').AsString);
except
  Exit;
end
if (DaysBetween(Date,DataModule1.QMalozab.FieldByName('t_dovidku_po').AsDateTime)) < 30 then
begin
  malozabForm.sDBGrid1.Canvas.Brush.Color := clyellow;
  malozabForm.sDBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
P.S в Uses System.DateUtils
Пишу много и развернуто
Heneken87 вне форума Ответить с цитированием
Старый 25.06.2018, 07:30   #3
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
Я как Ванга с опытом подумал, что дата рассчитывается не верно.
Ну вероятнее всего, как обычно в подобных случаях играют свою роль часы, минуты, секунды в AsDateTime. Проверьте через вотч, какие значения в Date и в t_dovidku_po находятся.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 25.06.2018, 07:51   #4
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Ну вероятнее всего, как обычно в подобных случаях играют свою роль часы, минуты, секунды в AsDateTime. Проверьте через вотч, какие значения в Date и в t_dovidku_po находятся.
ТС это Вам)
Пишу много и развернуто
Heneken87 вне форума Ответить с цитированием
Старый 25.06.2018, 08:07   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Знак поменяй
Код:
if ( DataModule1.QMalozab.FieldByName('t_dovidku_po').AsDateTime - Date) <= 30 then
ps DaysBetween не пройдет, ей без разницы какая дата раньше
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.06.2018, 13:29   #6
Alex_pro_0
Новичок
Джуниор
 
Регистрация: 20.06.2018
Сообщений: 2
По умолчанию

Получилось сделать так
Код:
uses ..., DateUtils;
...
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var C: TColor;
begin
 case DaysBetween(Now, DataModule1.QMalozab.FieldByName('t_dovidku_po').AsDateTime) of
  0..15 : C := clRed;
  16..30: C := clYellow;
 else C := clWhite;
 end;
 malozabForm.sDBGrid1.Canvas.Brush.Color := C;
 malozabForm.sDBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Alex_pro_0 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Количество дней между датами (Delphi) TyTan Помощь студентам 14 15.12.2022 11:36
Робота с MessageDlg(Delphi) CAMOBAP Помощь студентам 4 26.01.2011 16:27
Робота с OpenDialog(Delphi) CAMOBAP Помощь студентам 7 05.01.2011 13:55
Робота с ShowMessage (Delphi) CAMOBAP Помощь студентам 1 26.12.2010 16:03
Робота с AlphaSkins(Delphi) CAMOBAP Помощь студентам 0 26.12.2010 13:21