将表存储为动态集类型的记录集

问题描述 投票:0回答:1

我正在将当前数据库中的表传递给具有2维的记录集。当前:

Public Sub MySub(obj As Variant)
   Dim dbs As DAO.Database
   Dim tbl As DAO.Recordset

   Set dbs = CurrentDb
   Set tbl = dbs.OpenRecordset("TABLE")
   tbl.MoveLast
   Records = tbl.GetRows(tbl.RecordCount)

Stop
...
End Sub

[在我的本地窗口中逐步执行(并在立即窗口中检查),我可以看到tbl.RecordCount = 1074,但是Records仍然只获得具有所有字段的活动记录,即Records Type为Variant(0 to 37, 0 to 0)

存储查询时,我可以执行类似的方法。我也尝试过语法:

Set tbl = dbs.OpenRecordset("TABLE",dbOpenDynaset)

Set tbl = dbs.OpenRecordset("TABLE",dbOpenTable)

前者有相同的问题,而后者返回了运行时错误'3219'。


编辑:带有查询的GetRows示例(请参见注释)

Set dbs = CurrentDb
Set rsQuery = dbs.OpenRecordset("QUERY", dbOpenDynaset)
varRecords = rsQuery.GetRows(rsQuery.RecordCount) 
ms-access dao recordset
1个回答
1
投票

如果您已经阅读了GetRows文档,您将认识到GetRows从实际光标位置返回记录,并将光标移至下一个未检索的行(如.Move)。

当您将光标移动到最后一个记录(tbl.MoveLast)时,就不再有剩余的记录可以获取。

解决方案:

只需将光标移到Recordset的开头就可以了,一切都很好

tbl.MoveLast
tbl.MoveFirst
Records = tbl.GetRows(tbl.RecordCount)

dbOpenTable引发错误3219,如果打开的表不是本地表,并且.OpenRecordset("TABLE",dbOpenDynaset)等于.OpenRecordset("TABLE"),因为对于非本地表,dbOpenDynaset是默认值。 (文档也显示了这一点;)

© www.soinside.com 2019 - 2024. All rights reserved.