Отчет на базе перекрестного запроса с параметром

Училка
Дата: 24.11.2006 18:04:56
Доброго вечера, уважаемые! Подскажите, возможно ли такое в принципе? Как я поняла из топиков на форуме: либо отчет, либо параметр. А что же делать? Подскажите!
osmor
Дата: 24.11.2006 18:15:01
попробуйте ЯВНО указать параметр в запросе т.е.
PARAMETERS param1 Text;......
Владимир Саныч
Дата: 24.11.2006 18:20:09
Это есть в факах.
http://www.sql.ru/faq/faq_topic.aspx?fid=410
- и там найдите буквы перекр.
Училка
Дата: 24.11.2006 18:34:09
Владимир Саныч
Это есть в факах.
http://www.sql.ru/faq/faq_topic.aspx?fid=410
- и там найдите буквы перекр.


Там написано, как запускать запросы из VBA. Или я чего-то не поняла, но мне нужен отчет. Привожу код запроса:

PARAMETERS [Класс] Text ( 255 );
TRANSFORM Max(ДляСводной2.Оценка11) AS [Max-Оценка11]
SELECT ДляСводной2.Фамилия, ДляСводной2.Имя, ДляСводной2.Отчество
FROM ДляСводной2
WHERE (((ДляСводной2.КлассЭкстернат11)=[Класс]))
GROUP BY ДляСводной2.Фамилия, ДляСводной2.Имя, ДляСводной2.Отчество
PIVOT ДляСводной2.Предмет;
Владимир Саныч
Дата: 24.11.2006 21:12:09
Вы правы, что-то и у меня не получается... Уперся в то, что в Report_Open стал открывать рекордсет, сидящий на рекордсорсе отчета, и чистить контролсорсы тех контролов, для которых там нет поля, - и оказалось, что для рекордсета надо опять подставить значение параметра, а его в Report_Open я получить не смог.

Поэтому (как честный человек) предлагаю другое решение. Заводим переменную, которая содержит значение параметра, и функцию, которая возвращает значение этой переменной. К функции обращаемся в запросе (вместо параметра). Значение переменной задаем до запуска отчета. Меня такой подход спасал много раз.
Училка
Дата: 25.11.2006 08:12:52
Владимир Саныч
Меня такой подход спасал много раз.


Если не затруднит, подкиньте пример. Буду очень благодарна.
Владимир Саныч
Дата: 25.11.2006 17:28:11
Для Вашего запроса:

TRANSFORM Max(ДляСводной2.Оценка11) AS [Max-Оценка11]
SELECT ДляСводной2.Фамилия, ДляСводной2.Имя, ДляСводной2.Отчество
FROM ДляСводной2
WHERE (((ДляСводной2.КлассЭкстернат11)=Class()))
GROUP BY ДляСводной2.Фамилия, ДляСводной2.Имя, ДляСводной2.Отчество
PIVOT ДляСводной2.Предмет;

Где-нибудь в модулях пишем так:

Dim nClass as Integer
Function Class() As Integer
Class = nClass
End Function

Всё, что нужно сделать, - это задать значение переменной nClass перед вызовом отчета. Например, так:

nClass = InputBox("Класс?")
Училка
Дата: 26.11.2006 10:37:11
Владимир Саныч

Всё, что нужно сделать, - это задать значение переменной nClass перед вызовом отчета. Например, так:

nClass = InputBox("Класс?")



А в каком месте нужно задать значение этой переменной? Мне нужно, чтобы с кнопки на форме открывался отчет на базе этого запроса.
Владимир Саныч
Дата: 26.11.2006 11:08:26
Владимир Саныч
Значение переменной задаем до запуска отчета.
Владимир Саныч
Всё, что нужно сделать, - это задать значение переменной nClass перед вызовом отчета.
Училка
А в каком месте нужно задать значение этой переменной?

Если две моих предыдущих фразы не ответ на этот вопрос, то что это?
mds_world
Дата: 26.11.2006 11:21:32
Ув. Училка!
Прочитайте хелп по ф-ции InputBox и вам сразу станет понятно, что это выражение нужно ставить именно на ту кнопку, где вызывается отчет, прямо перед вызовом отчета.