Объявить глобально массив, размер которого берется из запроса
Здравствуйте.
Бьюсь уже несколько дней, не могу понять, как сделать.
Есть запрос - вытягивает из базы количество записей в самом запросе и еще значения трех полей из таблиц в базе.
То есть, грубо говоря, вывод такой:
строка 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 прохода при выполнении запроса, например) и не могу найти самостоятельно ответ.
Надесь, что описал ситуацию понятно.
Спасибо заранее.
Бьюсь уже несколько дней, не могу понять, как сделать.
Есть запрос - вытягивает из базы количество записей в самом запросе и еще значения трех полей из таблиц в базе.
То есть, грубо говоря, вывод такой:
строка 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 прохода при выполнении запроса, например) и не могу найти самостоятельно ответ.
Надесь, что описал ситуацию понятно.
Спасибо заранее.
Комментарии