我正在将当前数据库中的表传递给具有 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
类型为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)
如果您阅读了 GetRows 文档,您会认识到,GetRows
从实际光标位置返回记录并将光标移动到下一个未检索的行(如.Move
(。
当您将光标移动到最后一条记录(tbl.MoveLast
(,没有更多的记录可以获取。
溶液:
只需将光标移动到记录集的开头,一切正常
tbl.MoveLast
tbl.MoveFirst
Records = tbl.GetRows(tbl.RecordCount)
dbOpenTable 引发错误 3219,如果打开的表不是本地表,并且.OpenRecordset("TABLE",dbOpenDynaset)
等于.OpenRecordset("TABLE")
,因为对于非本地表dbOpenDynaset
默认值。(文档显示这也太;)