Есть база в файле .XLS - MyBase.
Есть поля - ID, Date
Нужно считать сколько дней осталось до ближайшей следующей даты из поля Date, перенося год.
Пусть считаемое поле имеет название DaysTo.
например:
Сегодня 27.11.2015
Если значение поля Date 26.11.2014 то выводит 365
(смотрит что дата уже прошла, подставляет текущий год, и если дата опять прошла, то подставляет следующий год) .
Если Date 28.11.2015 то выводит 1.
Сделал. Добавил поле в ADOQuery, проставил тип fkCalculated.
На событии onCalcField высчитал его.
Прописал сортировку в DBGrid - не сортирует.
Ошибка: Не найден элемент в коллекции.
Поискал в интернете, почитал форумы, задал вопрос.
Ответили - ставь DBGridEh - он умеет сортировать вычисляемые поля.
Поставил. Вычитал настройки.
SortLocal := true;
uses EhLibADO, EhLibMte;
DBGridEh - не сортирует по полю DaysTo.
Поискал в интернете, почитал форумы, задал вопрос.
Ответили - не *** нам мозги, вычисляй в запросе. DBgridEh НЕ (уже?!?!) умеет сортировать такие поля.
Потыкался, помыкался, написал запрос:
Код:
SQL := 'Select *,' +
'iif( Date() > Date' +
', iif(DateSerial(Year(Date()),Month(Date),DatePart(''d'', Date)) < Date()' +
',int(datediff(''d'', date(), DateSerial(Year(Date())+1,Month(Date),DatePart(''d'', Date))))'+
',int(datediff(''d'', date(), DateSerial(Year(Date()),Month(Date),DatePart(''d'', Date)))))' +
', int(datediff(''d'', date(), date)))' +
' as DaysTo from [MyBase$]';
В ADOQuery проставил у поля DaysTo тип fkData.
Поле появилось, считает правильно. Сортировка теперь работает.
Но при попытке внести изменения записи выдает ошибку:
Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени её последнего чтения.
Что теперь делать?
Как исправить?