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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2014, 08:26   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Я думаю что это мне нечего не даст для "перерисовывание строк" .
Попробую пояснить, пока еще не сплю
Код:
select *
 case
   when datediff(dd,pr_date,getdate())>13 and datediff(dd,proc_date,pr_date)>13 then $0000FFFF
   when datediff(dd,pr_date,getdate())>20 and datediff(dd,proc_date,pr_date)>13 then $00E46EFF
   else 0
 end "Для рисования";
... Тут остальные поля если надо
from Priem
join Procent on Procent.pr_priem_id=Priem.pr.id;
И отрисовка:
Код:
procedure Tfrmmain.dbgrdPriemDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
      if  qryPriem.FieldByName('Для рисования').AsIneger<>0   then
      begin
        dbgrdPriem.Canvas.Brush.Color:= qryPriem.FieldByName('Для рисования').AsIneger;
        dbgrdPriem.DefaultDrawColumnCell(Rect, DataCol, Column, State);
      end;
end;
Вуалище-вуаля. Даже цвет задается в запросе
Только нужно выяснить как правильно писать. Может вместо $0000FFFF писать его десятичный аналог, или как-то по другому.

P.S. Ну я надеюсь, понятно что это только как подсказка. Ибо я не понял что за проценты и по какой сетке они начисляются.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.10.2014, 15:01   #12
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

1. Как это запрос будет перерисовать и в обшем как это запрос будет работать . Я не понимаю . Stilet извиняюсь я не понял ваши советь .... Подождите пожалуйста еще думаю
Код:
procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
begin
 with qryPriem do
 begin
   Close;
   SQL.Clear;
   SQL.Add('select *, '+
            'case  '+
            ' when datediff(dd,pr_date,getdate())>13 and datediff(dd,proc_date,pr_date)>13 then $0000FFFF '+
            ' when datediff(dd,pr_date,getdate())>20 and datediff(dd,proc_date,pr_date)>13 then $00E46EFF '+
            ' else 0  '+
            ' end  '+
            ' from Priem  '+
            ' join Procent on Procent.pr_priem_id=Priem.pr_id');
   Open;
 end;
end;

Последний раз редактировалось xxbesoxx; 02.10.2014 в 15:06.
xxbesoxx вне форума Ответить с цитированием
Старый 02.10.2014, 15:09   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Запрос не в отрисовке. В основной запрос добавить данные, которые и позволят не обращаясь больше ни к чему прорисовать нужным цветом. Тогда необходимость и в клоне отпадет, который я использовал
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.10.2014, 15:18   #14
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Аватар Хорошо , смотрите , СУБД MS SQL если это имеет значения .

1. Структура таблиц
Код:
create database DBTest
----------------------
create table Priem
(
pr_id int identity(1,1) primary key,
pr_naimenovan varchar(40),
pr_date datetime,
pr_price money
);
---------------------
create table Procent
(
proc_id int identity(1,1),
proc_date datetime,
proc_money money,
pr_priem_id integer,
constraint fk_procent foreign key(pr_priem_id) references Priem(pr_id) 
on delete cascade on update cascade
);
2. Запрос всегда возвращает 0 в поля [color]
Код:
select *,
 case
   when datediff(dd,pr_date,getdate())>13 and datediff(dd,proc_date,pr_date)>13 then 'желтый цвет'
   when datediff(dd,pr_date,getdate())>20 and datediff(dd,proc_date,pr_date)>13 then 'красный цвет'
   else 0
 end [color]
from Priem
join Procent on Procent.pr_priem_id=Priem.pr_id;
3. Если бы возвращался в поля [color] 'желтый цвет' или 'красный цвет' то еще можно поработать из события DBGridEhDrawColumnCell что я не понял . Вот смотрю и проверяю

Последний раз редактировалось xxbesoxx; 02.10.2014 в 15:24.
xxbesoxx вне форума Ответить с цитированием
Старый 02.10.2014, 15:35   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. Те записи Priem, для которых нет дочерних в Procent не попадут в выборку
2. Те записи Priem, для которых больше одной дочерних в Procent продублируются в выборке
3. $0000FFFF=65535, $00E46EFF=14970623 и нет необходимости возвращать текстовые названия цветов
4. Запрос всегда возвращает 0 в поля - что написали в запросе, то и возвращает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.10.2014, 16:05   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Запрос всегда возвращает 0
Это потому что я подал идею, а не написал такой как тебе надо.
Я выше упомянул что не смог понять как ты считаешь оплату, поэтому в case подставь свои условия.
А вообще, если пример Аватара тебе подходит то юзай его, если он тебе наиболее понятен. Тут уж не имеет значения особо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.10.2014, 16:14   #17
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Stilet Я понял спасибо за ваши идеи , Да лучше CASE , вначале я напишу запрос правильно , все буду протестировать и напишу что получится
xxbesoxx вне форума Ответить с цитированием
Старый 02.10.2014, 17:36   #18
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Аватар Мне нравится ваши конструкция, вот это очень хорошо работает и код читается хорошо .

Код:
procedure Tfrmmain.dbgrdPriemDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if (qryPriem.RecordCount>0) and
     (not ADOClone.Locate('pr_priem_id',qryPriempr_id.AsInteger,[]) or
      (ADOClone.FieldByName('proc_money').AsFloat=0)) then
      begin
        if Date - int(qryPriem.FieldByName('pr_date').AsDateTime) > 20 then
        dbgrdPriem.Canvas.Brush.Color:= $00E46EFF
         else
        if Date - int(qryPriem.FieldByName('pr_date').AsDateTime) > 12 then
        dbgrdPriem.Canvas.Brush.Color:= $0000FFFF
         else Exit;
        dbgrdPriem.DefaultDrawColumnCell(Rect, DataCol, Column, State);
      end;

end;
Вот здесь на это блок как добавить
Код:
procedure Tfrmmain.dbgrdPriemDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if (qryPriem.RecordCount>0) and
     (not ADOClone.Locate('pr_priem_id',qryPriempr_id.AsInteger,[]) or
      (ADOClone.FieldByName('proc_money').AsFloat=0))  или qryProcent.FieldByName('proc_date') > 12 then
      begin
      ......................
      .......................
      end;

end;
Те записи Priem, для которых есть дочерних в Procent в поле proc_date ! Это тоже хочу проверить . Procent в поле proc_date клиент заплатил может несколько раз и потом пропал! Если больше 12 день или 20 тоже хочу покрасить ... Пожалуйста если можно как это условия добавить

Последний раз редактировалось xxbesoxx; 02.10.2014 в 17:44.
xxbesoxx вне форума Ответить с цитированием
Старый 02.10.2014, 19:27   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
клиент заплатил может несколько раз
Вопрос изначально нужно задавать правильно.
То есть от последней даты Procent.proc_date ориентироваться?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.10.2014, 20:54   #20
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Аватар "qryPriem.FieldByName('pr_date' )" тоже , потому что клиент может дал в ломбарде какой то "текника" и он его оставил !
А " Procent.proc_date " тоже , потому что клиент может заплатил процент несколько раз и потом он перестал платить

1. проверка (qryPriem.FieldByName('pr_date') работает отлично да .
2. последней даты Procent.proc_date ориентироваться? да правильно, мне это надо добавить.
Пожалуйста я вас очень прошу ...

Последний раз редактировалось xxbesoxx; 02.10.2014 в 20:59.
xxbesoxx вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка даных в DBGrid Roman123654789 БД в Delphi 5 22.05.2014 21:51
Экспорт из DBGrid в Excel и формат ячеек Дата demiancz БД в Delphi 0 21.12.2013 14:46
проверка записей в DBGrid JDmit БД в Delphi 5 07.06.2012 16:44
Проверка записей в DBGrid Stranger333 БД в Delphi 14 12.07.2010 18:11
Раскрасить DBGrid alex_base БД в Delphi 13 06.11.2007 11:36