Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 24.06.2018, 16:06   #1
Alex_pro_0
Новичок
 
Регистрация: 20.06.2018
Сообщений: 2
Репутация: 10
По умолчанию Робота с датами в 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, 08:05   #2
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 168
Репутация: 39
По умолчанию

Скажите , что именно работает не так как нужно. Я как Ванга с опытом подумал, что дата рассчитывается не верно.
Код:

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, 08:30   #3
Sciv
Профессионал
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Адрес: Курган
Сообщений: 3,219
Репутация: 1231
По умолчанию

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

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

Знак поменяй
Код:

if ( DataModule1.QMalozab.FieldByName('t_dovidku_po').AsDateTime - Date) <= 30 then

ps DaysBetween не пройдет, ей без разницы какая дата раньше
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума   Ответить с цитированием
Старый 25.06.2018, 14:29   #6
Alex_pro_0
Новичок
 
Регистрация: 20.06.2018
Сообщений: 2
Репутация: 10
По умолчанию

Получилось сделать так
Код:

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 вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


03:10.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru