繁体   English   中英

在ms-access中设置Recordsource之前设置过滤器?

[英]Setting the filter before setting the Recordsource in ms-access?

我正在处理VBA旧版应用程序中的性能问题-出于任何我不知道的原因,它会通过以下方式设置连续Form的记录源

myForm.RecordSource = newRecordsource

表单已经打开后。 单击按钮后应用过滤器:

DoCmd.ApplyFilter , "my filter sql"

我想过在设置RecordSource之前先设置默认过滤器,这样可以更快地显示表单。 但是我收到了错误消息2491:

The action or method is invalid because the form or report isn't bound to a table or query.@You tried to use the ApplyFilter or SearchForRecord action or method. However, the form or report you applied the filter to is not based on a table or query, so the form or report doesn't have any records to apply a filter to.@Use the SelectObject action or method to select the desired form or report before you run the ApplyFilter action. To base a form or report on a table or query, open the form or report in Design view, and enter the table or query name in the RecordSource property.

所以我必须设置过滤器!之后! 记录源已设置。 但是,当我设置RecordSource时,我的应用正在发送查询。 因此,在我的情况下,该行(“ myForm.RecordSource = newRecordsource”)将需要大约13秒的时间来执行。 之后再设置过滤器将导致更多的等待时间。

有没有一种方法可以阻止表单在应用过滤器之前加载所有数据集? 当整个应用程序(和其他几个应用程序)按照说明运行时,我不能只在RecordSource中更改查询或将其设置为设计模式。

无法做到这一点。

更改记录源后,Access会以任何形式查询。 即使您在分配记录源之前设置过滤器,更改记录源后该过滤器也会消失。

相反,如果过滤器是静态的,请调整记录源以合并过滤器条件。

示例(在Northwind.accdb上)

DoCmd.OpenForm "Inventory List"
Forms![Inventory List].Filter = "[Product ID] = 5"
Forms![Inventory List].FilterOn = True
Debug.Print Forms![Inventory List].FilterOn 'True
Forms![Inventory List].RecordSource = "Inventory"
Debug.Print Forms![Inventory List].FilterOn 'False, displays all records

实际上,有几种方法可以做到这一点。

首先,您可以(并且应该)使用“ where”子句简单地启动表单。 这将过滤表单。 因此,实际上,不要使用表单“过滤器”,而是在打开表单时使用“ where”子句。

如果在加载表单后有一些文本框和按钮可以“过滤”,则将表单记录源保留为空白,然后说出城市过滤器:

Dim strSQL     as string

strSQL = "select * from MyTable where city = '" & me.txtCity & "’"

me.RecordSource = strSQL

因此,以上就是您所需要的一切–只需删除表单记录源,然后获取条件,然后按照上述方法设置表单记录源。

如前所述,您还可以在打开表单之前提示/获取该条件,并且带有“ where”子句的打开表单将针对与表单绑定的数据源起作用,并且过滤器只会出现一次,并且该表单只会提取与您在open form命令中提供的where子句匹配的数据。 这种方法消除了即时设置表单记录源的需要。

两种方法都将是数据的一次性过滤器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM