Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Изименение источника строк (RecordSource) отчета
 
 автор: Pasat   (20.05.2007 в 19:39)   личное сообщение
 
 

Добрый вечер
Имеется отчет - источником записей (RecordSource) в котором могут быть раные запросы (запрос1] или [запрос2])
Из формы [a] нужно открыть этот отчет и задать RecordSource = [запрос1]
Из формы [b] нужно открыть этот отчет и задать RecordSource = [запрос2]
Убил 2 часа ничего не смог придумать

  Ответить  
 
 автор: bellerofont   (20.05.2007 в 19:46)   личное сообщение
 
 

меняйте recordsource в самом отчете на событие Open

  Ответить  
 
 автор: Pasat   (20.05.2007 в 19:51)   личное сообщение
 
 

В том то и проблема что туда можно написать только один запрос
Ме.recordsource = "запрос1"
или
Ме.recordsource = "запрос2"

Мне почему то кажется что задавать recordsource нужно в форме примерно как-то так:

Private Sub Кнопка1_Click()
Reports.[отчет1].recordsource = "запрос1"
DoCmd.OpenReport "отчет1", acPreview, "", ""
End Sub
Но не работает - Reports.[отчет1].recordsource = "запрос1"

  Ответить  
 
 автор: Bellerofont   (20.05.2007 в 23:00)   личное сообщение
 
 

>В том то и проблема что туда можно написать только один запрос
Куда туда?
А один открытый отчет может использовать два запроса? Мне кажется, что вы меня не поняли.
Форма открывает отчет, отчет на открытие проверяет необходимые поля формы и устанавливает необходимый Recordsource.

  Ответить  
 
 автор: Pasat   (21.05.2007 в 00:02)   личное сообщение
14 Кб.
 
 

Пока действительно не понимаю. Проблема в том что на событие "открытие отчета" в Recordsource этого отчета могу написать только один запрос а именно:
Private Sub Report_Open(Cancel As Integer)
Me.Recordsource = "Z1"
End Sub

В результате открывается отчет [О1] Recordsource в котором может быть только = "Z1"
Задача в том чтобы при нажатии в форме кнопки "Z1" открылся отчет [О1] с Recordsource = "Z1".
А при нажатии в форме кнопки "Z2" открылся тот же отчет [О1] но с Recordsource = "Z2".
Вообще это нужно для того чтобы не создавать несколько одинаковых отчетов только с разными Recordsource. Мне кажется что лучше иметь один отчет в Recordsource которого при открытии задавать нужный запрос.
Надеюсь что прилож.пример нагляднне покажет суть вопроса
Благодарен за предыдущие советы

  Ответить  
 
 автор: Bellerofont   (21.05.2007 в 02:28)   личное сообщение
12 Кб.
 
 

хотя бы так

  Ответить  
 
 автор: Pasat   (21.05.2007 в 08:03)   личное сообщение
13 Кб.
 
 

Извиняюсь но я несвсем коректно составил предыдущий пример.
Отчет нужно открывать из разных форм (не думал что это будет принципиально)
Из формы [F1] нужно открыть отчет [O1] и задать RecordSource = "Z1"
Из формы [F2] нужно открыть отчет [O1] и задать RecordSource = "Z2"
Спасибо за помощь, но в этом случае предложенное Вами решение не работает.
Прикладываю скоректированный пример

  Ответить  
 
 автор: Bellerofont   (21.05.2007 в 09:07)   личное сообщение
 
 

но что вам мешает, например, использовать публичную переменную, задаваемую в любой форме и считываемую отчетом? Так что все работает, просто вы заблудились в трех соснах :-)

  Ответить  
 
 автор: Bellerofont   (21.05.2007 в 09:13)   личное сообщение
 
 

Да и теперь параметр отчету можно передать через OpenArgs.
Еще одним вариантом является изменение свойства SQL запроса, прописанного в свойстве Recordsource отчета. Т.е. вариантов достаточно много, есть из чего выбрать ...

  Ответить  
 
 автор: ГлазастыйМышь   (21.05.2007 в 09:32)   личное сообщение
 
 

...исправлено... (т.к. уже ответили выше)

  Ответить  
 
 автор: Pasat   (21.05.2007 в 10:24)   личное сообщение
 
 

Я конечно понимаю, что вопрос несложный.
Но решить его не получается не хватает опыта
Если можно объясните на примере

  Ответить  
 
 автор: ГлазастыйМышь   (21.05.2007 в 10:48)   личное сообщение
 
 

ок
создай модуль Global в нем объяви переменную

Dim lReportSelect AS Long


в форме перед вызовом отчета

lReportSelect =1

(для другой формы другое значение)

в отчете на событие открытие

Select Case
       Case 1
                Me.RecordSource ="......текст запроса1"
      Case 2
                Me.RecordSource ="......текст запроса2"
         и т.д.
End Select

  Ответить  
 
 автор: Pasat   (21.05.2007 в 17:02)   личное сообщение
 
 

Cпасибо за пример
Вопрос решается если в модуле Global переменную объявлять так:
Public lReportSelect As Long
но не так
Dim lReportSelect AS Long
Спасибо всем

  Ответить  
 
 автор: ГлазастыйМышь   (21.05.2007 в 17:12)   личное сообщение
 
 

Точно, спутал

  Ответить  
 
 автор: Pasat   (22.05.2007 в 15:28)   личное сообщение
 
 

Добрый день
Появился вопрос
Есть отчет [O1] в котором RecordSource задается вышеописанным способом
Этот отчет помещаю как подчиненный на другом отчете [O2]
Соответственно в форме открываю не подчиненный отчет [O1], но главный отчет [O2].
Отчет [O2] не открывается (открывается модуль подчиненного отчета [O1] на этой строке
Case 1: Me.RecordSource ="Z1"

Главный отчет [O2] основан на таблице с большим числом записей.
Главный отчет [O2] без подчиненного открывается 15 сек.
Подчиненный отчет [O1] на других главных отчетах (не такие объемные) открывается нормально - в том смысле что не мешает открывать Главный отчет.
Попробовал напрямую в Подчиненном отчете [O1] на его открытие задать
Me.RecordSource ="Z1" (без выполнения дейсвий в раннее предложенном примере)
Результат такой же.
Я так понимаю если отчет объемный, то RecordSource должен быть установлен постоянный, а не задаваться при открытии.
Так ли это и можно ли решить эту проблему

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList