Master-detail отчет с переменным количеством строк в Band. Проблема.
Добрый день!
Господа, требуется ваша помощь. Помогите.
Кратко о предмете разговора: необзодимо сформировать отчет на основании данных из БД.
Отчёт содержит информацию о результатах тестирования.
Стурктура отчета:
ПРОТОКОЛ ТЕСТИРОВАНИЯ
1. Вопрос №1
1.1. Ответы тестируемого: ответ_тестируемого 1.1.1
ответ_тестируемого 1.1.2
1.2. Правильные ответы: правильный_ответ 1.2.1
правильный_ответ 1.2.2
правильный_ответ 1.2.3
2. Вопрос №2
2.1. Ответы тестируемого: ответ_тестируемого 2.1.4
2.2. Правильные ответы: правильный_ответ 2.2.1
правильный_ответ 2.2.2
правильный_ответ 2.2.3
правильный_ответ 2.2.4
правильный_ответ 2.2.5
3. Вопрос №3
3.1. Ответы тестируемого: ответ_тестируемого 3.1.1
ответ_тестируемого 3.1.2
ответ_тестируемого 3.1.3
ответ_тестируемого 3.1.4
ответ_тестируемого 3.1.5
3.2. Правильные ответы: правильный_ответ 3.2.1
правильный_ответ 3.2.2
правильный_ответ 3.2.3
правильный_ответ 3.2.4
правильный_ответ 3.2.5
4. Вопрос № 4
4.1. Ответы тестируемого: ответ_тестируемого 4.1.3 //!!! 4.1.3
4.2. Правильные ответы: правильный_ответ 4.2.1
правильный_ответ 4.2.2
правильный_ответ 4.2.3 //!!! 4.2.3
N. Вопрос № N
N.1. Ответы тестируемого: ответ_тестируемого N.1.M
ответ_тестируемого N.1.M+1
ответ_тестируемого N.1.....
ответ_тестируемого N.1.M+X
N.2. Правильные ответы: правильный_ответ N.2.M
правильный_ответ N.2.M+1
правильный_ответ N.2.....
правильный_ответ N.2.....
правильный_ответ N.2.M+X
Суть проблемы вот в чём. Не получается сформировать группы "ответы тестируемого" и "правильные ответы" в соответствии с номерами вопросов, т.е. что-бы например ответ_тестируемого 1.2.3 принадлежал вопросу №2 и находился в группе "ответы тестируемого".
"Ответы тестируемого" входят в множество ответов "правильные ответы".
Из базы данных извлекаю с помощью написанного SQL-запроса (компонент IBQuery).
Структура (поля) таблиц БД откуда извлекается информация:
Таблица PROTOCOL
ID_PROTOCOL / QUESTION / ANSWER /PLUS /ID_QUESTION
Таблица NUM_QUESTION
ID_QUEST / QUESTIONS / NOMER_QUEST
Таблицы не связаны. Связываются в программе с при извлечении по индксам ID_QUESTION=ID_QUEST
Проштудировал документацию на FastReport (как user manual так и programmers...). Изучил динамическое создание компонентов на форме, думал поможет, но...
потом понял, что именно master-detail должно быть тем самым, что требуется. Посмотрел demo-примеры с master-detail.
Може быть можно просто связать как-нибудь таблицы через компоненты типа DataSet, DataSource и frxDB
Но в целом лучше что-бы начала отрабатывался написанный SQL-запрос, а потом на основании запроса строить отчет.
Немного изменил один из demo-примеров, но вот пока работает не так как надо. В целом почти сделал то, что требуется (основываясь на примере), но вот никак не могу побороть эффект, когда в "ответы тестируемого" залезает последним элементом уже из следующего вопроса.
Прикрепляю проект (D7) где можно посмотреть.
Помогите добить проблему, уже третий день бьюсь, а толку...
p/s
Используется Delphi 7 (стандартные компоненты из палитры IB)+Firebird 2.5 (beta) embedded и FastReport 4.7.9.
Господа, требуется ваша помощь. Помогите.
Кратко о предмете разговора: необзодимо сформировать отчет на основании данных из БД.
Отчёт содержит информацию о результатах тестирования.
Стурктура отчета:
ПРОТОКОЛ ТЕСТИРОВАНИЯ
1. Вопрос №1
1.1. Ответы тестируемого: ответ_тестируемого 1.1.1
ответ_тестируемого 1.1.2
1.2. Правильные ответы: правильный_ответ 1.2.1
правильный_ответ 1.2.2
правильный_ответ 1.2.3
2. Вопрос №2
2.1. Ответы тестируемого: ответ_тестируемого 2.1.4
2.2. Правильные ответы: правильный_ответ 2.2.1
правильный_ответ 2.2.2
правильный_ответ 2.2.3
правильный_ответ 2.2.4
правильный_ответ 2.2.5
3. Вопрос №3
3.1. Ответы тестируемого: ответ_тестируемого 3.1.1
ответ_тестируемого 3.1.2
ответ_тестируемого 3.1.3
ответ_тестируемого 3.1.4
ответ_тестируемого 3.1.5
3.2. Правильные ответы: правильный_ответ 3.2.1
правильный_ответ 3.2.2
правильный_ответ 3.2.3
правильный_ответ 3.2.4
правильный_ответ 3.2.5
4. Вопрос № 4
4.1. Ответы тестируемого: ответ_тестируемого 4.1.3 //!!! 4.1.3
4.2. Правильные ответы: правильный_ответ 4.2.1
правильный_ответ 4.2.2
правильный_ответ 4.2.3 //!!! 4.2.3
N. Вопрос № N
N.1. Ответы тестируемого: ответ_тестируемого N.1.M
ответ_тестируемого N.1.M+1
ответ_тестируемого N.1.....
ответ_тестируемого N.1.M+X
N.2. Правильные ответы: правильный_ответ N.2.M
правильный_ответ N.2.M+1
правильный_ответ N.2.....
правильный_ответ N.2.....
правильный_ответ N.2.M+X
Суть проблемы вот в чём. Не получается сформировать группы "ответы тестируемого" и "правильные ответы" в соответствии с номерами вопросов, т.е. что-бы например ответ_тестируемого 1.2.3 принадлежал вопросу №2 и находился в группе "ответы тестируемого".
"Ответы тестируемого" входят в множество ответов "правильные ответы".
Из базы данных извлекаю с помощью написанного SQL-запроса (компонент IBQuery).
Структура (поля) таблиц БД откуда извлекается информация:
Таблица PROTOCOL
ID_PROTOCOL / QUESTION / ANSWER /PLUS /ID_QUESTION
Таблица NUM_QUESTION
ID_QUEST / QUESTIONS / NOMER_QUEST
Таблицы не связаны. Связываются в программе с при извлечении по индксам ID_QUESTION=ID_QUEST
Проштудировал документацию на FastReport (как user manual так и programmers...). Изучил динамическое создание компонентов на форме, думал поможет, но...
потом понял, что именно master-detail должно быть тем самым, что требуется. Посмотрел demo-примеры с master-detail.
Може быть можно просто связать как-нибудь таблицы через компоненты типа DataSet, DataSource и frxDB
Но в целом лучше что-бы начала отрабатывался написанный SQL-запрос, а потом на основании запроса строить отчет.
Немного изменил один из demo-примеров, но вот пока работает не так как надо. В целом почти сделал то, что требуется (основываясь на примере), но вот никак не могу побороть эффект, когда в "ответы тестируемого" залезает последним элементом уже из следующего вопроса.
Прикрепляю проект (D7) где можно посмотреть.
Помогите добить проблему, уже третий день бьюсь, а толку...
p/s
Используется Delphi 7 (стандартные компоненты из палитры IB)+Firebird 2.5 (beta) embedded и FastReport 4.7.9.
Комментарии
Тему можно закрывать. Проблему решил собственноручно.