Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.12.2015, 12:16
redoks redoks вне форума
Прохожий
 
Регистрация: 02.12.2015
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Сортировка по вычисляемому полю, ADOQuery, DBGrid, Excel

Есть база в файле .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.
Поле появилось, считает правильно. Сортировка теперь работает.

Но при попытке внести изменения записи выдает ошибку:
Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени её последнего чтения.

Что теперь делать?
Как исправить?
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter