【问题标题】:Open correct reports based off of combobox selections根据组合框选择打开正确的报告
【发布时间】:2016-10-08 20:13:38
【问题描述】:

我正在使用 Access 数据库来存储/组织每个项目的所有部分。我有 2 个组合框设置并正常工作:第一个是客户名称,一旦选择,第二个组合框会填充该客户的序列号(项目 ID 号)列表。每个项目都有几个与之关联的组件,需要在其中打印报告。

问题是大部分组件的详细信息都列在另一个单独的表中,因此组件编号必须与其所在的表交叉引用,然后必须提取该报告。

这是组合框从中提取信息的表。首先是客户名称,然后是与该客户关联的序列号。从那里,我想要来自 USER3 表的报告以及相关的 CATALOG 编号。

例如,这里是我的组合框选择:

客户名称 - 选择 CIPLA 会给我 EF-1092,96 或 99 的序列号

接下来我选择序列号 EF-1096 - 其目录号为 EDF50-00170(在来自 USER3 的 MV 表中)、EDF12-01114(在 FIL 表中)和 EDF12-00532(未分配表) .

因此,对于 EDF50-00170,这里是 MV 表,其中包含我想要的所有信息(MV 报告自动包含这些信息):

下面是相应的报告:

现在是棘手的部分,需要自动从系统中提取 EDF50-00170、EDF12-01114 和 EDF12-00532 报告,而不是我必须手动查找所有内容。这将分别是手动阀(如上所示)、过滤器和杂项报告,其中包含该类别的所有目录编号。

我已经将所有表格连接到它们各自的报告,例如以前的组合框设置中的这个,我假设这个新的必须是相似的:

 If partnumberselect.RowSource = "MV" Then
     DoCmd.OpenReport "RPTManualValve", acViewPreview, , "CATALOG = '" & Me.partnumberselect.value & "'"

总而言之,我需要一组与特定序列号相关联的报告。先感谢您!对不起,这是一个冗长的问题。

【问题讨论】:

  • 正如现在所描述的那样,现在帮助您太混乱了。我认为可能有一个 User3 / Report Name 的查找表会对您有很大帮助 - 但我真的没有不知道问题是什么样的。也许显示(和标记)其他表格和相关字段会有所帮助
  • @dbmitch 我添加了更多图片并尽力描述它们。希望对你有帮助,再次感谢
  • 当您说the correct report 时,您的意思是仅仅适当地过滤报告还是您实际上有不同的报告对象?
  • @SunKnight0 我的意思是过滤所有可能的报告(对于所有组件)以选择 EDF# 的报告。尽管根据其组件类型,它们都在不同的报告中。这有意义吗?
  • 这意味着您需要两个额外的表。一个是所有报告的表格,第二个是报告链接表的组件。我假设每个组件都需要链接到多个报表,如果不是这种情况,那么您只需要在组件表中添加一个链接字段,而不是单独的链接表。

标签: ms-access vba ms-access-2003


【解决方案1】:
Dim ThisDB As DAO.Database
Dim d As DAO.Recordset
Dim q As String

Set ThisDB = CurrentDb
q = "SELECT CATALOG, User3 FROM [mainSourceTableName] WHERE SerialNumber='" & Me.[SerialNumberSelected] & "'"
Set d = ThisDB.OpenRecordset(q, dbOpenDynaset)
d.MoveFirst
Do While Not d.EOF
    Select Case d!User3
        Case "MV"
            Rem Print MV Report for d!CATALOG
        Case "FV"
            Rem Print FV Report for d!CATALOG
        Rem same for other tables/reports
        End Select
    d.MoveNext
  Loop  
d.Close

带有消息框的预览示例:

DoCmd.OpenReport "RPTManualValve", acViewPreview, , "CATALOG = '" & d!CATALOG & "'"
MsgBox "Test"
DoCmD.Close acReport,"RPTManualValve"

【讨论】:

  • 谢谢,这看起来很有希望。我在 Rem Print ... 部分放了什么? DoCmd.OpenReport "RPTManualValve" for d!CATALOG?
  • 正确的报告打开了,但过滤器不起作用(它显示了 MV 表中的所有组件,而不仅仅是选定的组件)。数据库名称为“default_cat”,主表为“_MASTER_UPLOAD”,组合框名称分别为“CustomerSelection”和“SerialNumberSelection”。
  • 另外,无论我尝试多少方法让它工作,它都不喜欢for,它期待像for d!CATALOG = Something 这样的比较条件。感谢您迄今为止的所有帮助。我的声明现在看起来像这样:Case "MV" DoCmd.OpenReport "RPTManualValve", acViewPreview, , "CATALOG = '" & d!CATALOG & "'"。这将打开具有该类型第一个目录号的正确报告。现在,我们只需要显示该类型的所有其余报告。也许有柜台?
  • 那是因为你还在使用acViewPreview。如果您打印它们将全部打印,但您不能多次打开同一个报告预览。如果您想测试,您必须安装 PDF 打印机或其他“打印到文件”解决方案,否则可能会浪费一些纸张!或者在 DoCmd.OpenReport 之后添加一个消息框和一个关闭命令,这样每个报告都会出现,然后在您单击消息框上的确定时关闭,从而为下一个报告打开方式。
  • 完美。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
相关资源
最近更新 更多