我有一张大桌子。我正在制作一个显示表格的表单,并允许用户在许多不同的字段上使用Access的标准过滤器来仅选择一些数据。然后,在用户使用过滤器仅选择一些数据之后,我希望能够在各种查询中仅包含结果记录集(而不是整个原始表)。
我不确定是否可以直接在查询中引用表单的基础记录集。
显而易见的事情是使用vba迭代记录集,并用它填充一个临时表,它将在查询中使用,或者直接用数据做我想要的而不使用sql。但我相信迭代记录集比查询慢得多。有没有什么方法可以直接从查询中引用表单的记录集,或者将记录集的全部内容转储到临时表中?
答案 0 :(得分:1)
使用Form.RecordsetClone
将复制子表单的记录集,并包含通过Access内置过滤器应用的所有过滤器。
注意:Form.
是标准的,不会引用您的表单。因此,如果从主窗体触发,则您的引用需要为Me!SubformName!Form.RecordsetClone
。 MSDN
创建克隆后,似乎可以使用sql将记录集放入临时表中。但正如@Andre所提到的,仅添加PK将是减少大型记录集负载的理想选择。我找到的SQL字符串创建只是:
sql = "INSERT INTO TEMPTable VALUES" & rs.Fields("YourPKFieldNameFromSUBFORM")
假设sql
和rs
已分别声明为字符串和克隆记录集,并且已经为您的PK创建了一个TEMPERable列。 Source: #5和MSDN但是,您仍然需要遍历克隆的每个记录,因为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