Хотелось бы получить нечто похожее на то, что находится в приложении.
Для вывода такой таблицы в отчет стандартные источники плохо подходят и проще всего создать через MySQLWorkbench в БД новую таблицу с колонками:
- `id` (int). Первичный ключ. Автоинкрементный;
- `start` (timestamp(0)). Время начала цикла;
- `end` (timestamp(0)). Время конца цикла;
- `start_val` (double). Значение параметра на начало цикла;
- `end_val` (double). Значение параметра на конец цикла;
- `diff` (double). Разница между конечным и начальным значением параметра;
Создание подобной таблицы описано
в этой статье начиная с абзаца: "
Интерфейс проекта создан, переменные определены. Теперь можно создать таблицу...".
В эту таблицу в конце каждого цикла можно добавлять новую строку с итогами цикла. У Вас в проекте уже есть переменные старта и конца цикла (vrCycleStart и vrCycleEnd). Значение параметра на конец цикла можно получить в конце цикла, как и разницу между начальным и конечным значением. Не хватает переменной для значения параметра в начале цикла. Нужно создать её, например с именем "vrStartValue". Во время старта цикла записывать в неё текущее значение параметра:
begin
vrStartValue.Value := myVariable.Value;
end.
А по завершению цикла выполнять вставку новой строки в таблицу:
var
aQuery: string;
aStartStr, aEndStr: string;
aDiff: string;
begin
{ переводим время старта и конца цикла в пригодный для MySQL формат }
aStartStr := MySQLDateTime(vrCycleStart.AsDateTime, dttMillisecond);
aEndStr := MySQLDateTime(vrCycleEnd.AsDateTime, dttMillisecond);
{ считаем разницу между конечным и начальным значением параметра }
aDiff := FloatToStr(myVariable.AsFloat - vrStartValue.AsFloat);
{ формируем запрос на вставку новой строки в таблицу }
aQuery := 'INSERT INTO `my_table` (`start`, `end`, `start_val`, `end_val`, `diff`) VALUES(' +
aStartStr + ', ' + // время старта цикла
aEndStr + ', ' + // время конца цикла
QuotedStr(vrStartValue.AsStr) + ', ' // значение на начало цикла
QuotedStr(myVariable.AsStr) + ', ' // текущее значение параметра, т.е значение на конец цикла
QuotedStr(aDiff) + // разница между показаниями
')';
{ отправляем запрос на выполнение }
RunSQL(aQuery, nil, 0);
end.
В результате в Вашей БД будет таблица практически такая же, как Вы описали (за исключением "ИТОГО", его расчет легко добавить в отчете). Эту таблицу можно легко вывести в отчет в соответствии
с этой статьей. При таком подходе не нужно создавать множество источников и легко вывести итог с суммой разниц для каждого цикла. Отчет будет строиться очень быстро, т.к. данные уже подготовлены и их нужно только отобразить. Плюс эту таблицу при необходимости можно отобразить в компоненте Таблица в скаде.