我有一个AccessDB应用程序,我需要将当前用户应用过滤器的ItemID抓取到新表中以使用下游。使用子表格数据表.recordsetclone属性我可以看到所需的记录集,.recordcount报告正确的记录数。否则,以下内容不会产生所需的临时表,AccessVBA也不会抱怨。
Dim db As DAO.Database
Dim rstItemIDs As DAO.Recordset
Dim strSQL as String
Set db = CurrentDb
set rstItemIDs = Forms!Mainform![Data subform].Form.RecordsetClone
msgbox rstItemIDs.recordcount 'reports the correct result
strSQL = "SELECT rstItemIDs.ItemID INTO tempTable FROM rstItemIDs;"
db.Execute strSQL
是否可以针对dao.recordset构建SQL Select查询?
感谢您提供的任何指示。
答案 0 :(得分:2)
Access SQL不接受DAO
或ADODB
Recordset
作为查询的数据源。
但是,我很困惑,Access尝试时不会抱怨。每次尝试重现您的示例代码时,我都会收到错误#3078,“Microsoft Access数据库引擎找不到输入表或查询'rstItemIDs'。确保它存在并且其名称拼写正确。”
即使DoCmd.SetWarnings False
也没有取消该错误消息。
如果您对备选方案感兴趣,可以保留tempTable
(而不是每次都创建新版本),然后删除其内容并通过rstItemIDs
将每个值添加到第二个记录集。虽然这是一个RBAR(通过痛苦的行排)方法,但对于小记录集来说可能不会太痛苦。
基于集合的方法可以是根据表单的.RecordSource
和.Filter
属性创建查询。例如,我的表单.RecordSource
为SELECT * FROM foo
,当前表单.Filter
为id>10
,这会给我一个SELECT
,它返回表单的过滤记录:
Replace(Me.RecordSource, ";", "") & vbcrlf & "AND " & Me.Filter