0

我使用类似下面的东西将信息从一个未绑定的表单传递到另一个(请原谅没有错误检查):

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 中打开报告意味着我无法在事后向这些文本框添加信息,但我不确定。因此,非常感谢您对此提出的任何建议。谢谢!

4

2 回答 2

2

你有几个选择。您可以创建一个查询,并将表单控件值传递给那里的值,从而创建一个 1 记录查询,您可以将其作为报表的基础。

每列将如下所示:数据:表单![MyForm]![MyControl]

或者您可以将表单中的控件直接绑定到报表控件。

如果您选择这两种方法中的任何一种,您需要在打开报告时让包含值的表单保持打开状态。不需要复杂的代码。

于 2010-01-14T16:58:01.620 回答
0

我想我错过了一些东西。为什么不让报表的 Recordsource 与表单的 Recordsource 相同,然后在运行时过滤到 DoCmd.OpenReport 的 WhereCondition 参数中的特定 MainID?然后,您无需打开表单即可运行报告。

除非表单未绑定,或者具有动态计算的昂贵字段,否则我根本看不到将报表绑定到表单的任何优势。

于 2010-01-18T21:01:42.130 回答