Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
13th
Июн
Сравнить значения в TRxDBGrid
Posted by obzor under Delphi
Есть таблица связанная с базой и графически представлена в DBGrid`е, и мне нужно сделать кнопку nодчеркивания строки и при этом чтоб было условие проверки с предыдущей строкой, по определенному полю.
В данном случае у меня поле по которому надо сделать проверку ‘VREMJA’ — дата представленая в виде AsDateTime.
Не знаю как написать условие проверки текущей выбраной строки с предыдущей и значение nоля VREMJA выбраной строки должно быть больше чем предыдущей.
несложно-то несложно, НО …
это практически нереально написать в виде «прямого» условия(разве что данное условие оформить в виде функции)
function IsNextTime(f: TField): boolean;
var
d: TDatetime;
begin
if f.DataSet.IsEmpty then // проверямый НД(DataSet) может быть пустым
Abort
else if f.DataSet.BOF then // текущая запись может быть первой (у нее НЕТ предыдущей )
Abort
else begin
f.DataSet.Prev; // "прыгнули" назад
d:=f.asDateTime; //запомнили время предыдущей записи
f.DataSet.Next; // и "отпрыгнули" вперед
result:= // СРАВНИВАЕМ
f.AsDateTime // время текущей записи
> d; // ЗАПОМНЕННОЕ время предыдущей записи
end;
end;
if (grRaspMrt.SelectedField.FieldName='VREMJA') and (само условие) IsNextTime(grRaspMrt.SelectedField) then
А разумнее такое делать на SQL.
1. научиться работе c join и написать запрос в котором в КАЖДОЙ записи будет ДВА времени (текущее, то которое уже есть) и «предыдущее» (то с которым будем сверять текущее)
теперь условие будет выглядеть очень просто
( ds.FieldByname('towner').AsDateTime > ds.FieldByname('tprev').AsDateTime )
2. использовать вложенные запросы и дополнить запрос ФИЛЬТРОМ(where) чтобы остались исключительно нужные записи (towner>tprev)
а теперь даже и проверять не надо, все уже «проверено».
3. СДЕЛАТЬ обновление (update) ВСЕХ найденных записей одним махом. (надеюсь такова изначальная задача).
а теперь и нажимать-то кнопочку придется всего лишь раз.
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)