Объявить глобально массив, размер которого берется из запроса

отредактировано January 2015 Раздел: FastReport 4.0
Здравствуйте.
Бьюсь уже несколько дней, не могу понять, как сделать.

Есть запрос - вытягивает из базы количество записей в самом запросе и еще значения трех полей из таблиц в базе.

То есть, грубо говоря, вывод такой:

строка 1 : <значение поля1> <значение поля2> <значение поля3> <общее количество строк в выдаче>
строка 2 : <значение поля1> <значение поля2> <значение поля3> <общее количество строк в выдаче>
...
строка 'общее количество строк в выводе' : <значение поля1> <значение поля2> <значение поля3> <общее количество строк в выдаче>

Значения полей - разные, из базы, 'общее количество строк в выдаче' - одно и то же число для данного запроса.

Мне нужно сравнивать рядомстоящие элементы выдачи (поле1 из строки i c полем1 из строки i-1) и по результатам суммировать или не суммировать другие поля.


Хочу для этого все данные из запроса поместить в двумерный массив, где "первый" элемент - индекс (0,1,2), а второй - значение, соответственно, поля 1,2 или 3.

То есть, получить массив, где massiv [0] = значение поля1 для i+1 -ой строки выдачи моего запроса, massiv [1] - значение поля2 для i+1 -ой строки выдачи и massiv [2] - соответственно, значение поля3 для i+1 -ой строки выдачи, а i - изменяется в промежутке от 0 до <общее количество строк в выдаче>-1.


Когда я объявляю массив глобально, пишу в коде, в самом верху: string massiv [3][CDSQuery1."counts"]; (использую c++ script)

На страницу кладу masterdata, связываю ее с CDSQuery1

При запуске получаю или access violation, или еще какую-нибудь неприятную оибку (почему-то разные).
Комментирую объявление массива, запускаю, все ок. Опять добавляю объявление, запускаю - все ок.

Очевидно, дело в том, что, пока не выполнится CDSQuery1, не будет значения counts для него, а без этого значения я не могу объявить массив. После первого же выполнения какое-то значение counts вытягивается из базы, сохраняется где-то в памяти и может использоваться для объявления массива.

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

Вопрос: как выполнить запрос до объявления глобальных переменных? Ну, или, возможно, кто-то знает, как реализовать желаемое иначе. Встречал идею с использванием самого DataSet вместо массива, но не понимаю, как мне в этом случае сравнивать два рядом стоящих элемента (CDSQuery1."value" для i-го и i+1 прохода при выполнении запроса, например) и не могу найти самостоятельно ответ.


Надесь, что описал ситуацию понятно.
Спасибо заранее.

Комментарии

  • gpigpi
    отредактировано 17:18
    Откройте датасет Report.GetDataset('CDSQuery1').Open; перед объявлением массива

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.