如何在 MS Access 2007 中使用查询作为报告源?

Posted

技术标签:

【中文标题】如何在 MS Access 2007 中使用查询作为报告源?【英文标题】:How to use a query as a source for a report in 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,我将不胜感激 【参考方案1】:

您可以将 WhereCondition 与 DoCmd.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 参数,您可以在运行时以所需的任何方式过滤报表,同时仍然能够完全不过滤地运行报表。 你是对的,但在最初的问题中,它指出他将从带有组合框按钮触发器的表单中打开报告。 是的,我刚刚重读一遍,发现我错过了原始请求。

以上是关于如何在 MS Access 2007 中使用查询作为报告源?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MS Access 2007 中使用查询作为报告源?

如何在 Ms Access 2007 中执行 Mysql 查询

如何在 MS Access 2007 中使用 concatRelated

MS Access 2007 在查询中旋转数据并从 Excel 调用

如何通过 Java 从 MS Access 2007 数据库中读取 Unicode 字符?

在 MS Access 2007 中对 ODBC 表导入 sql 查询