【问题标题】:Debug.Print all data in a tableDebug.打印表格中的所有数据
【发布时间】:2020-05-21 20:27:52
【问题描述】:

我正在尝试使用记录集代码循环遍历表中的所有字段并 debug.print 它们的值和字段名称按照您自然会读取表的顺序,即从左到右跨列然后到下面的行

我已经完成了我想要做的事情,但只是第一行。这是代码:

Sub RecordSets()
Dim db As Database
Dim rs As Recordset
Dim i As Long
Set db = CurrentDb
Set rs = db.OpenRecordset("tbl1")

        For i = 0 To rs.Fields.Count - 1
                Debug.Print rs.Fields(i).Name
                Debug.Print rs.Fields(i).Value
        Next

rs.Close
db.Close
End Sub

立即窗口产生以下结果:

    Category
    Clothing
    Item
    Shirt
    Price
    5

这是顶行,完全符合我的要求。但是我无法让任何代码为其他行完成完全相同的事情。我 99% 确定我需要将 Do Until .EOF 循环与 For...Next 循环结合使用,但无论我尝试什么都无法获得结果,或者我在无限查询中锁定了访问权限。

感谢您的帮助

【问题讨论】:

  • 添加一个Do while not rs.EOF 循环。不要忘记在循环内rs.MoveNext...仅供参考 Debug.Print 在新行替换旧行之前仅处理大约 200 行...
  • 谢谢。在这种情况下和一般情况下Do Until rs.EOF 是否与Do While not rs.EOF 完成相同的事情?编辑*,谢谢,我有点想 debug.print 没有返回我想要的,不管我尝试了什么。我知道需要将其写入字符串。
  • Do while/do until 只是做几乎相同事情的不同方式:根据具体的用例,一种或另一种可能更可取。

标签: vba loops data-extraction


【解决方案1】:

未经测试:

Sub RecordSets()
    Const SEP as String = vbTab
    Dim db As Database
    Dim rs As Recordset, numFlds As Long
    Dim i As Long, s As String, sp as string
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tbl1")

    numFlds = rs.Fields.Count

    'print the headers (field names)
    For i = 0 To numFlds  - 1
        s = s & sp & rs.Fields(i).Name
        sp = SEP '<< add separator for subsequent items
    Next
    Debug.Print s

    'print the data
    sp = ""  '<< clear the separator
    Do While Not rs.EOF
        For i = 0 To numFlds - 1
            s = s & sp & rs.Fields(i).Name
            sp = SEP
        Next
        Debug.Print s
        rs.MoveNext
    Loop

    rs.Close
    db.Close
End Sub

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多