Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > OpenReport WhereCondition


Автор: FINANSIST 31.10.2012, 14:48
серверная: sql server 2005
клиентская: adp 2003
на сервере сделана  view для макета отчета на adp
отчет вызывается через клиентскую  форму которая запрашивает  для отчета  3 параметра( год, неделя с, неделя по )
вопрос: как лучше по скорости формирования отчета передавать параметры отбора:
вариант 1: ограничения передаются через OpenReport  WhereCondition
вариант 2: в таблицу, с которой тянет sql добавляю атрибут SelectFlagForReportHistory ( бинарник 1 либо 0)
завязываю sql на SelectFlagForReportHistory = 1
и зашиваю в кнопку вызова отчета следующий код:
Код

Private Sub Кнопка16_Click()
Dim myear As Integer
Dim myweekfrom As Integer
Dim myweekto As Integer
Let myear = InputBox("Введите год", "Request:")
Let myweekfrom = InputBox("Введите начальную неделю", "Request:")
Let myweekto = InputBox("Введите конечную неделю", "Request:")


    Dim stDocName As String

    stDocName = "Statistica"
'    DoCmd.OpenReport stDocName, acPreview, , "reportyear=" & myear & " and reportweek between  " & myweekfrom & " and  " & myweekto
DoCmd.RunSQL " update form_log set SelectFlagForReportHistory = 0 where SelectFlagForReportHistory = 1"
DoCmd.RunSQL " update form_log set SelectFlagForReportHistory = 1 where reportyear = '" & myear & "' and reportweek between '" & myweekfrom & "' and '" & myweekto & "'"
DoCmd.OpenReport stDocName, acPreview

End Sub

сравнил 2 варианта, пока данных не много - по скорости не понятно.
Жду советов - какой вариант оптимальнее.

Автор: bopoha 31.10.2012, 23:13
Помимо скорости я бы рассмотрел удобство использования.
вариант update каличный на мой взгляд. 

Вариант 1 предпочтительней. Запрос с отчета будет отправлен на сервер, а там все будет быстро обработано. Там уже все зависит от самого запроса и индексов.

Автор: FINANSIST 1.11.2012, 07:38
Есть большие опасения, что в 1 варианте запрос выгружает абсолютно все - передает всю эту хрень на клиента загружая локальную сеть, далее вся эта хрень подгружается в макет отчета, который старательно отрисовывает в себе ВСЕ записи и только потом через метод wherecondition   начинает что-то там ограничивать.
То что 1 вариант удобен с точки зрения восприятия кода - базара нет, а вот что по скорости, не подтвердятся ли мои опасения при большом объеме данных?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)