如何通过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.MoveFirst
、rs.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.Database
和Dim 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查看访问表中的记录集?的主要内容,如果未能解决你的问题,请参考以下文章