【问题标题】:Store table as recordset of Dynaset type将表存储为动态集类型的记录集
【发布时间】:2023-03-17 14:11:01
【问题描述】:

我将当前数据库中的一个表传递给一个二维的记录集。目前:

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 类型是 Variant(0 to 37, 0 to 0) .

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

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

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

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


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

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

【问题讨论】:

    标签: ms-access dao recordset


    【解决方案1】:

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

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

    解决方案:

    只需将光标移动到 Recordset 的开头,一切都很好

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

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

    【讨论】:

    • 谢谢。在提出问题之前,我会尽我所能阅读尽可能多的文档。为了我自己的启迪,你知道为什么当我将它与查询一起使用时,我不需要在 .GetRows 之前使用 MoveLast/MoveFirst 吗?语法见编辑...
    • 您是否阅读过.RecordCount-doc(在您想要获得文档的代码上按F1key).. 但它会告诉您必须移动 Last/First得到正确的计数,但这对执行时间有影响。如果没有正确的 RecordCount,您可以检查记录集是否已到达 .Eof(结束)并重复tbl.GetRows(tbl.RecordCount)直到它到达。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多