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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Отчет на основе данных в Форме
 
 автор: Sergiek   (25.12.2010 в 22:19)   личное сообщение
146 Кб.
 
 

Есть таблица, на основе этой таблицы есть форма которая в свою очередь по фильтру фильтрует и отображает информацию. Как сделать так чтобы отчет формировался из ходя из того какие данные по фильтру выбраны в форме. Если нужен файл я добавлю. Спасибо огромное.

  Ответить  
 
 автор: час   (26.12.2010 в 09:49)   личное сообщение
 
 

нужно запускать запрос с этими фильтрами.
Для этого надо создать запрос , в условиях отбора которого будут ссылки на соответствующие поля формы.
запрос лучше расположить в теле программы(событие кнопки)
DoCmd.RunSQL " sele....................

  Ответить  
 
 автор: kot_k_k   (26.12.2010 в 11:53)   личное сообщение
 
 

а не проще в отчете на открытие повесить
me.recordsourse=forms!имя_формі!recordsourse

  Ответить  
 
 автор: snipe   (26.12.2010 в 12:10)   личное сообщение
 
 

кот - не получится
там фильтрация идет
(используется me.filter)
так что через recordsource не пролезет

  Ответить  
 
 автор: kot_k_k   (27.12.2010 в 12:27)   личное сообщение
 
 

ну можно извернуться типа

str_=me.recordsourse
if instr(str_, "where")<>0 then 
      str_sql=mid (str_, 1,instr(str_, "where")+5) & " " & Me.Filter & " and " & mid (str_, instr(str_, "where")+5))
else
        if instr(str_, "order")<>0 then   
            str_sql=mid (str_, 1,instr(str_, "order")-1) & " where " & Me.Filter  & " " & mid (str_, instr(str_, "order")))
           else
                   str_sql=str_ & " where " & Me.Filter 
        end if
end if

  Ответить  
 
 автор: shanemac51   (27.12.2010 в 14:36)   личное сообщение
 
 

ваша форма предназначена для просмотра информации или для корректировки

очевидно первое
при отборе используйте не фильтр, а переформирование запроса

me.recordsource=""
s1="select .............. where......."
currentdb.querydefs("zrab").sql=s1
currentdb.querydefs.refresh

полученный запрос применяйте и для формы и для отчета

  Ответить  
 
 автор: Анатолий (Киев)   (27.12.2010 в 10:46)   личное сообщение
 
 

Если у отчета источник тот же, что и у формы, то в 90% случаев достаточно методу DoCmd.OpenReport в аргументе WhereCondition указать значение из св-ва Filter формы. Но надежнее - пройтись по RecordsetClone формы, собрать ID запиисей в конструкцию "[ID] In (1, 3, 6....)" и передать вышеописанному методу.

  Ответить  
 
 автор: Explorer   (27.12.2010 в 11:28)   личное сообщение
 
 

и как всегда очень нехватает таблицы ГОД :)

схема данных очень плохая

  Ответить  
 
 автор: snipe   (27.12.2010 в 15:04)   личное сообщение
 
 

У Анатолия(Киев) как всегда красивое решение

вот сделал как у него написано
кнопка64 расположена на форме

Private Sub Кнопка64_Click()
If Me.FilterOn = True Then
DoCmd.OpenReport "Отчет", acViewPreview, "", Me.Filter, acNormal
Else
DoCmd.OpenReport "Отчет", acViewPreview
End If
End Sub

  Ответить  
 
 автор: kot_k_k   (27.12.2010 в 15:40)   личное сообщение
 
 

мы не ищем легких путей

  Ответить  
 
 автор: Explorer   (27.12.2010 в 15:51)   личное сообщение
 
 

ога :)

  Ответить  
 
 автор: Анатолий (Киев)   (28.12.2010 в 11:55)   личное сообщение
 
 


f Me.FilterOn = True Then
DoCmd.OpenReport "Отчет", acViewPreview, "", Me.Filter, acNormal
Else
DoCmd.OpenReport "Отчет", acViewPreview
End If

Эту конструкцию можно заменить одной строкой:

DoCmd.OpenReport "Отчет", acViewPreview, "", IIF(Me.FilterOn, Me.Filter, ""), acNormal

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