MS ACCESS 2003 - Вопрос о передаче информации из несвязанной формы в отчет - PullRequest
0 голосов
/ 14 января 2010

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

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 означает, что я не могу добавить информацию в эти текстовые поля после факта, но я не уверен. Поэтому любые советы по этому вопросу очень ценятся. спасибо!

Ответы [ 2 ]

2 голосов
/ 14 января 2010

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

Каждый столбец будет выглядеть так: Данные: формы! [MyForm]! [MyControl]

Или вы можете просто привязать элементы управления из формы непосредственно к элементам управления отчетом.

Вам нужно будет оставить открытую форму, содержащую значения во время открытия отчета, если вы выберете любой из этих маршрутов. Сложный код не требуется.

0 голосов
/ 19 января 2010

Я думаю, что что-то упустил. Почему бы просто не сделать так, чтобы источник записей отчета был таким же, как источник записей формы, а затем выполнить фильтрацию во время выполнения для определенного MainID в аргументе WhereCondition DoCmd.OpenReport? Затем вы можете запустить отчет, не открывая форму.

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

...