【问题标题】:MSAccess: Get ItemIDs from Recordsetclone into New Table?MS Access:从 Recordsetclone 中获取项目到新表中?
【发布时间】:2014-10-21 05:19:00
【问题描述】:

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

感谢您提供的任何指点。

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    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
    

    【讨论】:

    • HansUp - 非常有帮助!您的评论促使我尝试使用子表单的 .Filter 属性作为我的 makeTable 查询的基础。我已经在其他地方使用过 RBAR 方法,但这些方法在扩展上都失败了。即使使用更大的数据集,这种方法似乎也能按预期工作。
    猜你喜欢
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    相关资源
    最近更新 更多