如何通过vba查看访问表中的记录集?

Posted

技术标签:

【中文标题】如何通过vba查看访问表中的记录集?【英文标题】:How to view a recordset in an access table by means of vba? 【发布时间】:2011-03-03 14:34:08 【问题描述】:

在嵌入式访问 vb 编辑器的帮助下,我编写了一个小代码来分析我的数据库的字段值,并希望最终在打开的访问内的表中查看记录集。作为一个新手,我只能使用 Debug.Print 来显示字段名称。谁能告诉我我可以使用哪些语句/命令执行我的 SQL 字符串以查看结果记录集的值?

Debug.Print FinalSQLString

【问题讨论】:

是否有某些原因您不能只使用数据表表单并将 SQL 语句分配给它的 RecordSource 属性?为什么你认为你需要打开一个记录集来处理数据?这样做完全是在滥用 Access,让自己的事情变得更加困难。 访问也可以让事情变得更难:***.com/questions/5663918/… 【参考方案1】:

这是基本配方:

Dim db As Database
Dim rs As Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM myTable")

知道您正在使用带有 Access 的 Jet 数据访问对象 (DAO) - 谷歌了解详情。

表达式(rs.BOF and rs.EOF) = True 表示没有行。

使用rs.MoveFirstrs.MoveNext 转到第一行和下一行。在rs.MoveNext 之后测试rs.EOF;当True 时,最后一行已经处理完毕。

rs(FieldName) 返回名为 FieldName 的列的值(字符串表达式)。

rs(1) 返回第二列的值。

完成后,rs.Close


无法手动访问 RecordSet 并将其显示在数据表视图中。相反,您必须创建一个 QueryDef 对象并使用它来执行查询并显示结果的数据表视图:

Dim qd As QueryDef

On Error Resume Next
CurrentDb.QueryDefs.Delete "temp"
On Error GoTo 0

Set qd = db.CreateQueryDef("temp", "SELECT * FROM myTable")

DoCmd.OpenQuery "temp", acViewNormal, acEdit

【讨论】:

@rskar 感谢您的解释。我可以使用哪个 vb 命令/脚本查看查询结果,例如“SELECT * FROM myTable”? 哦 - 你的意思是你想让 Access 打开一个数据表? 查看 iDevlop 的回答 - DoCmd.OpenQuery 的工作方式就像您进入“查询”面板并双击其中一个查询图标一样。打开的是数据表视图。 代码cmets:最好声明变量Dim db As DAO.DatabaseDim rs As DAO.Recordset。这消除了类型库的歧义。对于 Database 数据类型,这不是绝对必要的(我知道没有命名空间冲突),但对于 Recordset 来说非常重要,因为还有 ADO Recordset 类型,但它有不同的方法/属性。 我更喜欢测试rs.RecordCount = 0 而不是做测试,即rs.EOF and rs.BOF。如果您只想知道是否返回记录,则检查 Recordcount 就足够了。另一方面,如果您想要返回的记录的准确计数,则必须先执行 rs.MoveLast,然后才能使 RecordCount 属性准确无误。但是,对于测试空记录集,这不是必需的。【参考方案2】:

据我所知,没有办法显示包含记录集的 VBA 实例的数据表。如果您的记录集的来源是 strQSL,那么您可以使用结果创建一个表,然后打开该表,或者更优雅地创建 queryDef 并打开它:

Sub ShowQd(strQdName As String, strSql As String)
'creates queryDef and display it in a datasheet'
    Dim qd As DAO.QueryDef

    Set qd = CurrentDb.CreateQueryDef(strQdName)
    With qd
        .ReturnsRecords = True
        .SQL = strSql
    End With
    DoCmd.OpenQuery strQdName
End Sub

如果您专注于显示内容,您还可以在表单中放置一个 ListBox,将其列数设置为查询返回的字段数(qd.Fields.Count),并将您的 strSql 设置为 ListBox 的 RowSource .并且...如果您将所有相关代码放入该表单中,您现在可以在任何数据库中导入一个表单以快速显示您想要的内容:) 祝你好运!

【讨论】:

自 A2000 以来的表单具有可分配的 Recordset 属性,因此,是的,确实可以打开记录集,打开数据表表单,然后将数据表表单的记录集设置为在代码中打开的记录集。正如我在另一条评论中所说,在少数情况下,其中有任何实用程序(而不是仅分配数据表表单的 Recordsource 属性),但实际上是可能的。我能想到的唯一真正用途是显示断开连接或合成的记录集。 @David-W-Fenton ...并且表单需要控件。因此,仅凭一个表格和一个记录集,我们仍然无处可去 AFAIK。 Querydef 绝对是一个更快的解决方案。

以上是关于如何通过vba查看访问表中的记录集?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 VBA 将“整个”DAO 记录集插入到表中

使用 VBA 在 Access 2010 中的表单上显示记录集

Access Access 2007中的记录集问题

大型记录集 (VBA) 的 MS Access 插入慢

在 VBA 中对断开连接的 ADODB 记录集应用过滤器

MSAccess 2010 + VBA:值不是记录集字段对象的默认属性