使用查询中表单中的筛选记录

时间:2016-05-11 19:56:13

标签: sql vba ms-access dao

我有一张大桌子。我正在制作一个显示表格的表单,并允许用户在许多不同的字段上使用Access的标准过滤器来仅选择一些数据。然后,在用户使用过滤器仅选择一些数据之后,我希望能够在各种查询中仅包含结果记录集(而不是整个原始表)。

我不确定是否可以直接在查询中引用表单的基础记录集。

显而易见的事情是使用vba迭代记录集,并用它填充一个临时表,它将在查询中使用,或者直接用数据做我想要的而不使用sql。但我相信迭代记录集比查询慢得多。有没有什么方法可以直接从查询中引用表单的记录集,或者将记录集的全部内容转储到临时表中?

2 个答案:

答案 0 :(得分:1)

使用Form.RecordsetClone将复制子表单的记录集,并包含通过Access内置过滤器应用的所有过滤器。

注意:Form.是标准的,不会引用您的表单。因此,如果从主窗体触发,则您的引用需要为Me!SubformName!Form.RecordsetCloneMSDN

创建克隆后,似乎可以使用sql将记录集放入临时表中。但正如@Andre所提到的,仅添加PK将是减少大型记录集负载的理想选择。我找到的SQL字符串创建只是:

sql = "INSERT INTO TEMPTable VALUES" & rs.Fields("YourPKFieldNameFromSUBFORM")

假设sqlrs已分别声明为字符串和克隆记录集,并且已经为您的PK创建了一个TEMPERable列。 Source: #5MSDN但是,您仍然需要遍历克隆的每个记录,因为sql语句一次只输出一行。

答案 1 :(得分:0)

作为克里斯托弗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