MS Access:从Recordset克隆到新表中获取项目?

时间:2014-10-20 20:29:33

标签: ms-access access-vba

我有一个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查询?

感谢您提供的任何指示。

1 个答案:

答案 0 :(得分:2)

Access SQL不接受DAOADODB Recordset作为查询的数据源。

但是,我很困惑,Access尝试时不会抱怨。每次尝试重现您的示例代码时,我都会收到错误#3078,“Microsoft Access数据库引擎找不到输入表或查询'rstItemIDs'。确保它存在并且其名称拼写正确。”

即使DoCmd.SetWarnings False也没有取消该错误消息。

如果您对备选方案感兴趣,可以保留tempTable(而不是每次都创建新版本),然后删除其内容并通过rstItemIDs将每个值添加到第二个记录集。虽然这是一个RBAR(通过痛苦的行排)方法,但对于小记录集来说可能不会太痛苦。

基于集合的方法可以是根据表单的.RecordSource.Filter属性创建查询。例如,我的表单.RecordSourceSELECT * FROM foo,当前表单.Filterid>10,这会给我一个SELECT,它返回表单的过滤记录:

Replace(Me.RecordSource, ";", "") & vbcrlf & "AND " & Me.Filter