在查询中使用来自表单的过滤记录
Using filtered records from a form in a query
我有一个大table。我正在制作一个显示 table 的表单,并允许用户在许多不同的字段上使用 Access 的标准过滤器来仅选择部分数据。然后,在用户使用过滤器仅选择部分数据后,我希望能够在各种查询中仅包含生成的记录集(而不是整个原始 table)。
我不确定是否有方法可以在查询中直接引用表单的基础记录集。
显而易见的事情是使用 vba 遍历记录集,并用它填充一个临时的 table 用于查询,或者直接做我想做的事不使用 sql 的数据。但我相信遍历记录集比查询慢得多。有什么方法可以直接从查询中引用表单的记录集,或者将记录集的全部内容转储到临时文件中 table?
使用 Form.RecordsetClone
将复制子表单的记录集并包括通过 Access 的内置过滤器应用的任何过滤器。
注意:Form.
是标准的,与您的表格无关。因此,如果从主窗体触发,您的参考需要是 Me!SubformName!Form.RecordsetClone
。 MSDN
创建克隆后,似乎可以使用 sql 将记录集放入临时 table。但正如@Andre 所提到的,仅添加 PK 是减少大型记录集中负载的理想选择。我发现的 SQL 字符串创建很简单:
sql = "INSERT INTO TEMPTable VALUES" & rs.Fields("YourPKFieldNameFromSUBFORM")
假设 sql
和 rs
已分别声明为字符串和您克隆的记录集,并且已经为您的 PK 创建了包含一列的 TEMPTable。 Source: #5 and MSDN 但是,您仍然需要遍历克隆的每条记录,因为 sql 语句一次只输出一行。
作为对 Christopher D. 回答的补充,这是我最终使用的最终代码:
CurrentDb.Execute "DELETE FROM FilteredJobs"
Dim rs As Recordset
Set rs = Search_subform.Form.RecordsetClone
rs.MoveFirst
While Not rs.EOF
CurrentDb.Execute "INSERT INTO FilteredJobs VALUES (" & rs.Fields("JobID") & ")"
rs.MoveNext
Wend
我有一个大table。我正在制作一个显示 table 的表单,并允许用户在许多不同的字段上使用 Access 的标准过滤器来仅选择部分数据。然后,在用户使用过滤器仅选择部分数据后,我希望能够在各种查询中仅包含生成的记录集(而不是整个原始 table)。
我不确定是否有方法可以在查询中直接引用表单的基础记录集。
显而易见的事情是使用 vba 遍历记录集,并用它填充一个临时的 table 用于查询,或者直接做我想做的事不使用 sql 的数据。但我相信遍历记录集比查询慢得多。有什么方法可以直接从查询中引用表单的记录集,或者将记录集的全部内容转储到临时文件中 table?
使用 Form.RecordsetClone
将复制子表单的记录集并包括通过 Access 的内置过滤器应用的任何过滤器。
注意:Form.
是标准的,与您的表格无关。因此,如果从主窗体触发,您的参考需要是 Me!SubformName!Form.RecordsetClone
。 MSDN
创建克隆后,似乎可以使用 sql 将记录集放入临时 table。但正如@Andre 所提到的,仅添加 PK 是减少大型记录集中负载的理想选择。我发现的 SQL 字符串创建很简单:
sql = "INSERT INTO TEMPTable VALUES" & rs.Fields("YourPKFieldNameFromSUBFORM")
假设 sql
和 rs
已分别声明为字符串和您克隆的记录集,并且已经为您的 PK 创建了包含一列的 TEMPTable。 Source: #5 and MSDN 但是,您仍然需要遍历克隆的每条记录,因为 sql 语句一次只输出一行。
作为对 Christopher D. 回答的补充,这是我最终使用的最终代码:
CurrentDb.Execute "DELETE FROM FilteredJobs"
Dim rs As Recordset
Set rs = Search_subform.Form.RecordsetClone
rs.MoveFirst
While Not rs.EOF
CurrentDb.Execute "INSERT INTO FilteredJobs VALUES (" & rs.Fields("JobID") & ")"
rs.MoveNext
Wend