将 table 存储为 Dynaset 类型的记录集

Store table as recordset of Dynaset type

我正在将当前数据库中的 table 传递给二维记录集。目前:

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

在我的本地人 window 中单步执行(并立即检查 window),我可以看到 tbl.RecordCount = 1074 但 Records 仍然只获取活动记录字段,即 Records 类型是 Variant(0 to 37, 0 to 0).

我能够在存储查询时执行类似的方法。我也试过语法:

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

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

前者同样问题,后者返回运行-time error '3219'.


编辑:带查询的 GetRows 示例(参见评论)

Set dbs = CurrentDb
Set rsQuery = dbs.OpenRecordset("QUERY", dbOpenDynaset)
varRecords = rsQuery.GetRows(rsQuery.RecordCount) 

如果您阅读了 GetRows 文档,您会认识到,GetRowsreturns 从实际游标位置记录并将游标移动到下一个未检索的行(喜欢.Move).

当您将光标移动到最后一条记录(tbl.MoveLast)时,没有更多的记录需要获取。

解决方案:

只需将光标移动到 Recordset 的开头就可以了

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

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