gpt4 book ai didi

ms-access - 将报表的打开事件中的参数传递给参数查询 (Access 2007)

转载 作者:行者123 更新时间:2023-12-03 06:52:59 26 4
gpt4 key购买 nike

我想知道是否有办法使用 VBA 在 Access 2007 查询中设置参数。我刚开始在 Access 中使用 VBA,我的任务是向现有应用程序添加一些功能。

我遇到的问题是可以在应用程序中的两个不同位置调用相同的报告。第一个是数据输入表单上的命令按钮,另一个是总机按钮。报告本身基于参数查询,要求用户输入供应商 ID。

用户希望不必在数据输入表单上输入供应商 ID(因为表单已显示供应商 ID),但他们希望在总机上提示输入供应商 ID。

我遇到的问题是如何调用报表的查询(在报表的打开事件中)并将表单中的供应商 ID 作为参数传递。我已经尝试了一段时间,但我无法让任何东西正常工作。这是到目前为止我的代码,但我显然被难住了。

私有(private)子报告_打开(取消为整数)

Dim intSupplierCode As Integer

'Check to see if the data entry form is open
If CurrentProject.AllForms("frmExample").IsLoaded = True Then

'Retrieve the SupplierID from the data entry form
intSupplierCode = Forms![frmExample]![SupplierID]

'Call the parameter query passing the SupplierID????
DoCmd.OpenQuery "qryParams"


Else

'Execute the parameter query as normal

DoCmd.OpenQuery "qryParams"?????


End If

结束子

我尝试过 Me.SupplierID = intSupplierCode,虽然它可以编译,但当我运行它时它会崩溃。这是我的参数查询的 SQL 代码:

参数[输入供应商]长;选择供应商.供应商ID、供应商.公司名称、供应商.联系人名称、供应商.联系人标题来自供应商WHERE (((Suppliers.SupplierID)=[输入供应商]));

我知道有一些方法可以解决这个问题(也可能是一种简单的方法),但正如我所说,我缺乏使用 Access 和 VBA 的经验,这让事情变得很困难。如果你们中的任何人能提供帮助,那就太好了!

最佳答案

此处提出的建议是从查询中 100% 删除该参数。这不仅解决了您的问题,而且意味着您可以使用代码、其他表单的查询,而不会让您的整个设计崩溃,因为一个愚蠢的表单未打开(因此是您问题的根本原因)。

因此,从查询中删除参数。这也意味着您的报告现在不需要某些已打开的表格。再说一遍,如果没有打开某些愚蠢的表单,为什么您的报告无法工作?

因此,删除该参数。现在,在打开报表的表单中,它可以通过过滤器,更重要的是使用所谓的“where”子句。 MS-access 中设计这个“where”子句是为了解决必须提前知道需要什么样的参数和过滤器的问题。它发生在运行时,因此许多不同的表单可以调用并打开该报告。

现在,在调用并打开表单的表单中,您可以:

Docmd.OpenReport "rptSuppliers",acViewPreview, , _
"SupplierCode = " & me.SupplierCode

因此,在上面,参数是动态创建的。最大的优势是明天您可以使用另一个表单打开相同的报告,或许还可以按区域进行过滤。

如果没有传递 where 子句并且用户只是打开表单,则不会使用过滤器,也不会出现提示,并且将显示所有记录。这可能是您最好的方法。

但是,如果由于某种奇怪的原因,您仍然认为在一个愚蠢的表单恰好未打开时确实有必要有一些报告提示,那么请将以下代码放在表单打开事件中。

If CurrentProject.AllForms("form1").IsLoaded = False Then
Me.Filter = "SupplierID = " & InputBox("Enter Supplier ID")
Me.FilterOn = True
End

但是,我真的会努力避免在报告打开事件中硬编码一些愚蠢的表单名称。这不仅意味着您对现在附加到报告的某些愚蠢表单的硬编码依赖性,而且如果您稍后复制该报告,甚至复制原始表单(甚至重命名任何这些对象),那么您必须进入应用程序并寻找,现在找到您作为开发人员引入依赖项的位置。这种方法会大大增加应用程序的维护成本,因此应该提倡。

所以,这里的建议是转储参数查询。只需提供一个表格或一些提示系统即可启动报告。这些表单应提示用户输入您想要过滤的信息。或者就像您的情况一样,绑定(bind)表格及其当前记录提供了该信息。该系统的优点在于现在与报告没有任何依赖性。

任何形式,甚至任何代码都可以自由地传递 pramaeter,并且它不限于供应商 ID,而可以是您希望的任何类型的过滤器或参数。

请记住,用户可能不希望打开该表单,也可能不希望出现提示。根据您的设计和问题,即使在没有打开任何表单的情况下启动报告并且不希望收到允许他们查看该报告中的所有记录的提示时,用户也将被迫输入参数值。

关于ms-access - 将报表的打开事件中的参数传递给参数查询 (Access 2007),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2838940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com