![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Есть база в файле .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. Поле появилось, считает правильно. Сортировка теперь работает. Но при попытке внести изменения записи выдает ошибку: Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени её последнего чтения. Что теперь делать? Как исправить? |