MS ACCESS 2003 - Вопрос о передаче информации из несвязанной формы в отчет
-
20-09-2019 - |
Вопрос
Я использую что-то вроде приведенного ниже для передачи информации из одной несвязанной формы в другую (извините за отсутствие проверки ошибок):
Sub Button_Click()
Dim db as DAO.database
Dim rs as DAO.recordset
Dim sql as string
docmd.openform "NextFormIamAbouttoUse"
sql = "SELECT * FROM tblMain WHERE MainID = " & Me.As_MainID & ";"
' usually debug here
set db = currentdb
set rs = db.openrecordset(sql)
if rs.eof then
msgbox "oops message"
else
rs.movefirst
[Forms]![NextFormIamAbouttoUse].as_mainID = rs![MainID]
[forms]![NextFormIamAbouttoUse].value1 = rs![value1]
' etc
rs.close
set db = nothing
set rs = nothing
sql = ""
end if
'error stuff
end sub
хорошо, значит, я могу использовать подобные вещи и для передачи информации из форм в отчеты?видите ли, я использую множество форм, полных текстовых полей, в качестве панелей мониторинга, где текстовые поля не служат для ввода, а скорее отображают быструю информацию.
пользователь перемещается по различным формам, чтобы создать формы, похожие на панель мониторинга, по своему вкусу, а затем в какой-то момент захотеть распечатать.поэтому я хотел создать похожие (с точки зрения предлагаемых данных) отчеты в каждой точке, чтобы они могли распечатать страницу с информацией, которую они создали с помощью этих форм.
итак, я попытался сделать это с помощью отчета:
Sub Button_Click()
Dim db as DAO.database
Dim rs as DAO.recordset
Dim sql as string
docmd.openreport "ReportTester", acViewPreview
sql = "SELECT * FROM tblMain WHERE MainID = " & Me.As_MainID & ";"
' usually debug here
set db = currentdb
set rs = db.openrecordset(sql)
if rs.eof then
msgbox "oops message"
else
rs.movefirst
[reports]![ReportTester].as_mainID = rs![MainID]
[reports]![ReportTester].value1 = rs![value1]
' etc
rs.close
set db = nothing
set rs = nothing
sql = ""
end if
'error stuff
end sub
просто как предположение, и это не сработало.никаких ошибок или чего-то еще.просто таким образом не будет отображаться никакая информация.даже идентификационный номер не передаст.
Итак, я думаю, что открытие отчета в AcViewPreview означает, что я не могу добавить информацию в эти текстовые поля постфактум, но я просто не уверен.Так что любой совет по этому поводу очень ценится.Спасибо!
Решение
У вас есть несколько вариантов.Вы можете либо создать запрос, и передать значения элемента управления формы в значения там, таким образом, создавая запрос на 1 запись, на котором вы можете основывать свой отчет.
Каждый столбец будет выглядеть следующим образом: Данные:Формы![Моя форма]![Мой контроль]
Или вы можете просто привязать элементы управления из формы непосредственно к элементам управления отчета.
Вам нужно будет оставить открытой форму, содержащую значения, во время открытия отчета, если вы выберете любой из этих маршрутов.Никакого сложного кода не требуется.
Другие советы
Мне кажется, я чего-то не понимаю.Почему бы вам просто не сделать, чтобы Recordsource отчета совпадал с Recordsource формы, а затем фильтровать во время выполнения по определенному MainID в аргументе WhereCondition DoCmd.OpenReport?Затем вы можете запустить отчет без необходимости открывать форму.
Если форма не является несвязанной или не содержит полей, которые дорого вычислять "на лету", я вообще не вижу никаких преимуществ в привязке отчета к форме.