MS ACCESS 2003 - Вопрос о передаче информации из несвязанной формы в отчет

StackOverflow https://stackoverflow.com/questions/2065214

Вопрос

Я использую что-то вроде приведенного ниже для передачи информации из одной несвязанной формы в другую (извините за отсутствие проверки ошибок):

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?Затем вы можете запустить отчет без необходимости открывать форму.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top