我使用类似下面的内容将信息从一个未绑定的表单传递给另一个表单(原谅无错误检查):
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中打开报告意味着事后我无法向这些文本框添加信息,但我不确定。所以对此的任何建议都非常感谢。谢谢!
答案 0 :(得分:2)
您有几个选择。您可以创建查询,并将表单控件值传递到那里的值,从而创建一个记录查询,您可以根据该查询创建报表。
每列如下所示:数据:表格![MyForm]![MyControl]
或者您可以直接将表单中的控件绑定到报表控件。
如果您选择其中任何一条路线,则需要在打开报告时将表单保持打开并包含值。无需复杂的代码。
答案 1 :(得分:0)
我想我错过了什么。为什么不让报表的Recordsource与表单的Recordsource相同,然后在运行时过滤到DoCmd.OpenReport的WhereCondition参数中的特定MainID?然后,您可以运行报表,而无需打开表单。
除非表单未绑定,或者具有动态计算成本高昂的字段,否则我看不到将报表绑定到表单的任何优势。