Delphi - MyDAC - Быстрый отчет

У меня нет проблем с созданием отчета из запроса или таблицы MySQL. Проблема начинается, когда я хочу добавить переменную в отчет в каждой строке.

Например, таблица "PRODUCTS": ID|PRODUCT-NAME|SHELF-LIFE

Как лучше всего, если я хочу создать отчет, который показывает мне

ID | NAME | EXPIRE-DAY

Где: EXPIRE-DAY = TODAY + SHELF-LIFE

Заранее спасибо за помощь, буду признателен даже за ссылку.


person Michael Virdis    schedule 14.06.2017    source источник


Ответы (2)


Три варианта:

  1. Используйте FR-функции, чтобы добавить свои дни.
  2. Использовать переменную в FR и вычислять в Delphi через .OnGetValue-event
  3. Добавьте расчет EXPIRE-DAY в свой MySQL-Query.

что-то типа:

Select ID, NAME, SHELF-LIFE, DATE_ADD( CURDATE(), INTERVAL SHELF-LIFE DAY) as EXPIRE-DAY from mytable
person Daniel    schedule 14.06.2017
comment
4) или использовать выражение? - person Victoria; 14.06.2017

Вы можете использовать внутреннюю функцию FR DATE для получения текущей даты: [Date + <YourDatasetName."SHELF-LIFE">]

person gpi    schedule 14.06.2017
comment
DATE — это не функция, а системная переменная. - person Victoria; 14.06.2017
comment
Дата тоже функция. См. вкладку «Функции» в дереве данных или используйте такой скрипт begin ShowMessage(Date); ShowMessage(<Date>); end. - person gpi; 14.06.2017
comment
Не с точки зрения выражений, которые вы показали. Кроме того, я предполагаю, что эти две записи будут возвращать разные значения, <Date> одно относится к этой системной переменной (то же самое, что вы использовали в выражении в своем ответе), в то время как Date является функцией, экспортируемой PascalScript, и возвращает то же самое, что и Delphi, то есть значение текущей даты с частью времени, установленной на 0, которое отличается от значения даты и времени, возвращаемого этой переменной. P.S. такой скрипт потерпит неудачу. - person Victoria; 14.06.2017
comment
Такой скрипт procedure ReportTitle1OnBeforePrint(Sender: TfrxComponent); begin ShowMessage(Date); ShowMessage(<Date>); ShowMessage(Now); ShowMessage(Time); ShowMessage(<Time>); end; работает нормально. Протестировано с FR Enterprise 5.6.2 - person gpi; 14.06.2017
comment
Извините, тогда они должны добавить перегрузки для процедуры ShowMessage, потому что экспортированная из PascalScript принимает только строковые параметры. Из того, что вы говорите, он также принимает TDateTime параметры. Хорошо знать. Спасибо! - person Victoria; 14.06.2017