【问题标题】:How to use a query as a source for a report in MS Access 2007?如何在 MS Access 2007 中使用查询作为报告源?
【发布时间】:2011-06-24 05:49:17
【问题描述】:

我在 MS Access 中执行了以下操作:我制作了一个包含组合框和按钮的表单。您从那里选择一个选项并单击该按钮,它应该会打开一个报告。现在,我编写了一个查询,从表中选择了几个字段,并在 where 子句中将条件设为 where name=str(combo1.value),并将报告源指定为此查询。现在,当我选择值并单击按钮时,它会打开一个空白报告。我怎样才能让它只加载那些特定的值?

我没有在任何地方保存组合框值。它说它会记住该值以供以后使用。我不保存它是在做正确的事吗?我应该怎么做才能完成这项工作?请帮帮我!

编辑:组合框使用表 X 中第 1 列的值。我没有将该值绑定到任何字段,并且正在使用“记住该值以供以后使用”选项假如。组合框本质上是一个酒店列表,而报告是住在所选酒店的人员列表。当我输入字段的 ID(如 X 中定义的那样)时,它就起作用了。但问题是,它应该指的是酒店的名称,而不是 ID,我应该在弹出窗口中输入 ID。我该怎么办?

编辑2:查询如下:
SELECT Table_1.Hotel_Name, Table_2.Name_of_Delegate, Table_2.Address, Table_2.City, Table_2.Center, Table_2.Spouse_Present, Table_2.No_of_Children, Table_2.No_of_Guests, Table_2.No_of_Rooms FROM Table_1 INNER JOIN Table_2 ON Table_1.ID=Table_2.Hotel_of_Residence WHERE Table_1.Hotel_Name=FormName.Combo7.Text;

当我单击按钮(打开报告)时,它会在弹出框中询问酒店的名称。我怎样才能避免这种情况?我做错了什么?

【问题讨论】:

  • 在设计模式下打开您的表单。单击组合框将其选中。然后右键单击以打开弹出菜单并选择属性。在属性表上,选择数据选项卡。然后告诉我们这些属性旁边的框中是什么:行源类型;行源;绑定列。如果行源是查询,请复制该查询 SQL 并将其粘贴到您的问题中。
  • @HansUp:没有控制源。行源是SELECT [Table_Name].[ID], [Table_Name].[Name] FROM [Table_Name];。行源类型是表/查询。 Bound Column 为 1(我假设它显示了我希望在组合框中显示的名称。)当我选择一个名称并单击 Display Report 按钮时,它会调用一个嵌入的宏来打开报告.在宏设计器的 where 条件中,我提供了根据所选值填充它的子句(报告),但它似乎不起作用。请帮忙。
  • @HansUp:另外,如果你能帮助我this,我将不胜感激

标签: ms-access ms-access-2007 report


【解决方案1】:

您可以将 WhereConditionDoCmd.OpenReport Method 一起用作报表记录源的“动态 WHERE 子句”。在打开报告的命令按钮的单击事件中使用类似的内容。

DoCmd.OpenReport "YourReport", , , "[name]=" & Me.combo1

从报告的查询中删除您添加的 WHERE 子句where name=str(combo1.value)

我用方括号将 name 括起来,因为 name 是保留字。见Problem names and reserved words in Access

编辑:在评论中,您谈到了组合框:

“行源是 SELECT [Table_Name].[ID], [Table_Name].[Name] FROM [Table_Name];。绑定列是 1(我假设它显示了我希望在组合框中显示的名称。) "

当您引用组合框的值时,该值是“绑定列”的值。因此,在您的情况下,绑定列是 1,这意味着组合值将是 [Table_Name].[ID]。但是,您希望根据组合的 [名称] 列打开您的报告。因此,将组合的绑定列从 1 更改为 2。

【讨论】:

  • @HansUp:你能给我一个分步指南吗?我在某个地方弄错了,我不知道出了什么问题。我尝试按照您的方式和@bluefeet 的方式进行操作,甚至尝试将两者混合使用。我最接近的是当我必须输入需要选择的字段的ID,而不是存储在字段中的字符串时,即输入6而不是Hotel XYZ,它可以工作。但是把 Hotel XYZ 和它抛出一个错误。接下来,输入这个的地方,真的不应该来,是一个弹出框。我对这个程序很困惑。请帮帮我!
  • @HansUp, @bluefeet:我认为问题在于我在组合框中提供了名称,但它希望 ID 完成查询并准备报告。我该如何纠正这个问题?
  • @HansUp:我正在查找DoCmd.OpenReport Method,我注意到FilterName 是要传递的参数之一。我是否应该编写一个简单的Select 查询,然后保存并在此处使用它并按照您的建议传递参数?这样会更好吗?
  • 编辑您的问题,向我们展示组合框的行源。如果行源是查询,请向我们展示查询 SQL。如果行源是一个值列表,请告诉我们。并告诉我们你有什么作为组合的 Bound Column 属性。
  • @HansUp:喂?你能帮帮我吗?这是唯一阻碍我的项目完成的事情:(
【解决方案2】:

要使用组合框的值打开报表,您需要在报表查询中执行以下操作:

SELECT fields
FROM table
WHERE YourValue = [Form]![FormName]![ComboBox Value]

您必须指定表单的名称和值,以便报表查询知道该值。希望这可以帮助。

【讨论】:

  • 但这意味着报表总是需要打开表单才能运行。使用 DoCmd.OpenReport 命令的 WhereCondition 参数,您可以在运行时以所需的任何方式过滤报表,同时仍然能够完全不过滤地运行报表。
  • 你是对的,但在最初的问题中,它指出他将从带有组合框按钮触发器的表单中打开报告。
  • 是的,我刚刚重读一遍,发现我错过了原始请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多