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

mds_world
Дата: 26.11.2006 11:25:37
Кстати, Владимир Саныч уже именно это и написал
Владимир Саныч
Всё, что нужно сделать, - это задать значение переменной nClass перед вызовом отчета. Например, так:

nClass = InputBox("Класс?")
Училка
Дата: 26.11.2006 11:27:09
Владимир Саныч
[quot Владимир Саныч]Если две моих предыдущих фразы не ответ на этот вопрос, то что это?


Владимир Саныч, это - не ответ, это - откровение свыше!!!Ну подскажите, как с отчетом быть! Мастер видит только поля ФИО, в конструкторе переменная встала на место условия отбора. Очет надо руками создавать? Поля в списке тоже только ФИО отображаются. И где искать то место, где можно задать свойства переменной до открытия отчета?
Запуталась, уж не серчайте.
Владимир Саныч
Дата: 26.11.2006 11:32:06
Училка
Мастер

Какой мастер??? В Вашем вопросе ничего про мастер не говорилось. Я был уверен, что отчет у Вас уже существует. Если нет, то у меня не хватает телепатических способностей, чтобы увидеть, что происходит в мастере.

Училка
Поля в списке тоже только ФИО отображаются.

Честное слово, я не вижу отсюда, где там у Вас список, какие в нем должны быть поля и какие из них Вы называете полями ФИО.

Училка
И где искать то место, где можно задать свойства переменной до открытия отчета?

Строчкой выше. Или Вы отчет открываете не программой? Надо программой, иначе ничего не получится.
Владимир Саныч
Дата: 26.11.2006 11:43:35
P.S. Кажется, я понял, что происходит. Поскольку у перекрестного запроса список полей меняется от запуска к запуску, то в момент создания отчета Аксесс видит этот список полей каким-то случайным образом - совершенно не обязательно правильным с точки зрения программиста (в данном случае Училки). Поэтому я предлагаю временно убрать из запроса этот параметр, чтобы список полей показался правильно. После этого надо создать отчет. Но на этом проблемы не кончаются - дело в том, что при запуске отчета опять будет проблема с теми полями, которые в отчете созданы, а в запросе не оказались. На этот случай надо сделать то, что я уже упоминал:
Владимир Саныч
в Report_Open стал открывать рекордсет, сидящий на рекордсорсе отчета, и чистить контролсорсы тех контролов, для которых там нет поля

Вот как это можно сделать (приблизительно):

Private Sub Report_Open(Cancel As Integer)
Dim rs As Recordset, c As Control, f As Field, bFound As Boolean
Set rs = CurrentDb.OpenRecordset(Me.RecordSource, dbOpenDynaset, dbReadOnly)
For Each c In Me.Controls
    If TypeOf c Is TextBox Then
        bFound = False
        For Each f In rs.Fields
            If c.ControlSource = f.Name Then bFound = True
        Next
        If Not bFound Then c.ControlSource = ""
    End If
Next
rs.Close
Set rs = Nothing
End Sub
Училка
Дата: 26.11.2006 11:45:42
Я плохо объясняю, Вы меня не поняли. Изначально вопрос стоял о возможности создания отчета на базе перекрестного запроса с параметрами. Поэтому-то запрос есть, а отчета - нет. Отсюда и мои вопросы о том, как этот отчет создать (при помощи мастера или конструктора, программно я вряд-ли справлюсь).
Вы пишите: "К функции обращаемся в запросе (вместо параметра)." Она и встала в запросе на место параметра, но в результате запроса возвращает только первые поля (Фамилия, Имя, отчество) (пустые).
Может быть, Вы могли бы сбросить мне небольшой пример, на основе которого я могла бы посмотреть, как мне решать эту задачу.
Владимир Саныч
Дата: 26.11.2006 11:50:32
Прежде всего, будьте добры, подтвердите, что видели мое P.S.

Училка
Отсюда и мои вопросы о том, как этот отчет создать (при помощи мастера или конструктора, программно я вряд-ли справлюсь).

Не надо программно, никто так не делает (кроме каких-то особо специфичных задач).

Училка
но в результате запроса возвращает только первые поля (Фамилия, Имя, отчество) (пустые).

Мне почему-то кажется, что запрос у Вас не перекрестный.
Училка
Дата: 26.11.2006 12:19:52
Ваш PS увидела уже после ответа.
А что касается запроса (перекрестный или нет), то код моего запроса приведен в самом начале, а сейчас я речь веду все время о том варианте, который посоветовали мне Вы. Он перекрестный? Он должен возвращать: строки: Фамилия,Имя,Отчество; столбцы:Предмет; значение: оценка; параметр: класс. В Вашем варианте он возвращает только Фамилия, Имя, Отчество в качестве заголовков столбцов.
Владимир Саныч
Дата: 26.11.2006 12:25:22
Училка
А что касается запроса (перекрестный или нет), то код моего запроса приведен в самом начале

Понял, виноват.

Училка
а сейчас я речь веду все время о том варианте, который посоветовали мне Вы. Он перекрестный?

Да.

Училка
В Вашем варианте он возвращает только Фамилия, Имя, Отчество в качестве заголовков столбцов.

Правильно, потому что там стоит параметр, которому еще никто не задал значение, т.е. берется, видимо, 0 - и из таблицы выбираются только те записи, в которых КлассЭкстернат11=0, т.е. не выбирается ничего. Поэтому я и предлагаю (см. выше) на время создания отчета временно отменить параметр (точнее, всю строку WHERE).

Прошу прощения, ухожу на несколько часов.
Училка
Дата: 26.11.2006 12:29:23
P.S. Список полей, выносящихся в заголовки столбцов в моем запросе, не меняется, он отображает сразу все имеющиеся заголовки , даже с пустыми значениями.
Владимир Саныч
Дата: 26.11.2006 12:39:50
Училка
P.S. Список полей, выносящихся в заголовки столбцов в моем запросе, не меняется, он отображает сразу все имеющиеся заголовки , даже с пустыми значениями.

Это Вы хотите, чтобы оно так работало. На самом деле если в таблице не окажется каких-то данных и поле в перекрестном запросе не образуется, то отчет будет выдавать ошибку.

Всё, убежал.