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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2011, 15:21   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Вопрос Подсветка только что вставленной записи в БД

Добрый вечер! Захотелось чо-то как-то разукрасить немного программку свою. Есть идея: после вставки записи в БД, подсветить ячейку с только что вставленною записью и закрасить ее (сохранив текст в ячейке) в какой-нибдуь цвет. Подскажите как это можно сделать? Чтобы визуально было видно, какие данные добавились. Именно записи, которые были вставлены последними в запросе.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 01.05.2011, 15:27   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Смотря как у тебя записи характеризуются.
Например после вставки с учетом что ключ - автоинкрементное поле, можно просто сделать выборку этого ключа по максимуму: Select max(id) from...
После переоткрыть уже измененный набор данных, и в обработчике открисовки прописать заливку другим цветом если поле такое-то равно тому что max(id) вернет
Идею понял?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.05.2011, 15:40   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Та не, автоинкрементного ключа нету. ПРосто идет вставка.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 01.05.2011, 17:47   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну даже не знаю...
Если не к чему привязываться, то наверное ничего не получится.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.05.2011, 20:07   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Ну а если как-то сравнить целую колонку с каким-то значение и потом красить? Был бы обычный стринггрид, было бы проще. Может как-то запросом можно сравнить колонку из датасета со значением?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 01.05.2011, 21:21   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если последние вставленные записи имеют какой-то набор полей, однозначно идентифицирующие записи, то значения этих полей можно сохранить в динамическом массиве. А потом использовать его для окраски фона колонок грида. При следующей операции вставки очищать массив и заполнять новыми значениями и т.д.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.05.2011, 07:59   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Вот, нашел код покраски всей строки:
Код:
procedure TForm2.DBGridEh3DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
begin
 if TDBGridEh(Sender).DataSource.DataSet.FieldByName('DATAOBR').AsString = DateToStr(Form12.sDateEdit1.Date) then
    TDBGridEh(Sender).Canvas.Font.Color:=clBlue;
    TDBGridEh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
Однако компилятор ругается и говорит, что
Код:
[Error] Unit2.pas(1889): Incompatible types
и показывает строчку:
Код:
    TDBGridEh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
Уже который раз сталкиваюсь с этой проблемкой и никак не могу найти решение. Кто знает, подскажите что не так?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 02.05.2011, 08:23   #8
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

По моему более надежное и простое решение это событие гриды OnGetCellParams.
В нем можно по условию менять как цвет шрифта, так и цвет закраски.
Пользуюсь для целей выделения строк в DBGridEh только им и проблем никогда не возникает. К примеру:
Код:
procedure TFrameB.DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh; 
      AFont: TFont; var Background: TColor; State: TGridDrawState);
begin
  if DM.qrSelectB.FieldValues['D1'] < Date then
    AFont.Color := clMedGray;

  if (DateToStr(DM.qrSelectB.FieldValues['D1']) = DateToStr(Date)) and
     (DM.qrSelectB.FieldValues['B_R'] = 0) and (Column.FieldName = 'D1')
  then begin
    AFont.Color := clBlue;
    AFont.Style := [fsBold];
    Background := $EFD3C6;
  end;
end;
Можно еще проверить значение параметра State и в зависимости от того отмечена строка или нет менять подсветку.
Иначе синий маркер (цвет по умолчанию), который показывает текущую строку затирает сделанные изменения в цвете этой строки.

Последний раз редактировалось Прик; 02.05.2011 в 08:51.
Прик вне форума Ответить с цитированием
Старый 02.05.2011, 08:34   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Хы, а у меня не хочет работать
Код:
procedure TForm2.DBGridEh3GetCellParams(Sender: TObject; Column: TColumnEh;
  AFont: TFont; var Background: TColor; State: TGridDrawState);
begin
 if Form2.qry1.FieldValues['DATAOBR'] = '02.05.2011' then
   AFont.Color:=clRed;
 if Form2.qry1.FieldValues['DATAOBR'] = DateToStr(Form12.sDateEdit1.Date) then
 begin
   AFont.Color:=clBlue;
   AFont.Style:=[fsBold];
   Background:=$EFD3C6;
 end;
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 02.05.2011, 08:48   #10
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

В каком смысле?
Не меняет цвета? Или событие не приходит? Или ошибка какая?
Прик вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что-то типа bat-файла, но только на Java Tema_Crazzzy Общие вопросы по Java, Java SE, Kotlin 1 12.02.2011 21:31
Сохранение файла в только что созданную директорию artemavd Общие вопросы Delphi 20 30.07.2010 10:41
Все ли пары элементов линейного массива имеют только одну общую цифру в своей записи? с++ agent007 Visual C++ 3 07.07.2010 02:36
Как показать только не повторяющиеся записи А. Долматов Microsoft Office Access 4 20.05.2008 14:29