【问题标题】:MS ACCESS 2007 VBA : DAO recordset....how can I view all the "fields" in the returned collectionMS ACCESS 2007 VBA:DAO 记录集....如何查看返回集合中的所有“字段”
【发布时间】:2011-03-08 07:35:17
【问题描述】:

如果我像这样执行 SQL 语句:

sql = "SELECT * FROM tblMain"

     set rs = currentdb.openrecordset(sql)

我可以使用什么方法来查看我刚刚创建的这个集合中的每个“字段名称”。我收到一些非常奇怪的错误,指出在此集合中找不到该项目。

我知道该字段存在于表中,当我引用它时,我已经三次检查了所有地方的拼写,SQL 应该会提取所有内容,但我想查看它。

是否有 debug.print 方法可以查看所有这些字段

谢谢 贾斯汀

【问题讨论】:

  • @Justin 你似乎是一个勤奋的学生。所以,只是为了笑,接受 Raj 的答案并对其进行调整以使用“For Each ... Next”循环来遍历记录集的字段集合。
  • 啊是的!我用了一个 msgbox 来遍历每个名​​字!酷!
  • @Hans....是的,我正在尽可能多地了解它。我想使用 .NET 和 C#。但我想一旦我进入那些东西,这将是一个很好的背景???我们拭目以待。
  • 我代表 HansUp、Remou、David Fenton 和我想你的好话。
  • 嗯,Access 可以很好地帮助理解数据库设计,但这不是 .NET/C# 的问题。当然,如果您遵循 Access 附带的示例数据库和模板,您最终会做很多可怕的事情,这些事情不会转移到其他 SQL 方言或基于服务器的数据引擎(例如,绑定形成整个表格)。与其他 SQL 变体相比,您需要跟踪 Access/Jet/ACE SQL 中的特殊之处。但这是学习规范化和其他基本数据库主题的好方法。

标签: ms-access vba ms-access-2007 dao


【解决方案1】:

您可以遍历记录集的字段集合。

代码是 OTTOMH

Dim NumFields as Integer

For NumFields = 0 to rs.Fields.Count -1
    Debug.Print Rs.Fields(NumFields).Name
Next

或者,您可以在set rs = currentdb.openrecordset(sql) 处设置断点,然后在语句执行后立即右键单击rs,选择添加监视 并在 中查看整个内容>手表窗口。

【讨论】:

    【解决方案2】:

    这是一个脚本,它将查找包含您在 Access 数据库中的每个表(系统和附加表除外)中指定的字符串的字段并将其写入文本文件:

    Option Compare Database
    Option Explicit
    
    Sub main()
    Dim db As Database
    Dim rs As Recordset
    Dim bFinished As Boolean
    Dim sFieldName As String
    Dim iPosition, z, x As Integer
    Dim bRetVal  As Boolean
    Dim tdTemp As TableDef
    Dim iDatabaseNumbers As Integer
    
    
    Const FIELD_TO_FIND = "FieldName"
    
    
    Set db = CurrentDb
    
    Open Left(db.Name, Len(db.Name) - 4) & "_" & FIELD_TO_FIND & ".txt" For Output As #1
    
        For x = 0 To db.TableDefs.Count - 1
    
            Set tdTemp = db.TableDefs(x)
            bRetVal = IIf(tdTemp.Attributes And dbSystemObject, False, True)
            If bRetVal Then
                bRetVal = IIf(tdTemp.Attributes And dbAttachedTable, False, True)
            End If
    
            If bRetVal Then
                Set rs = db.OpenRecordset(db.TableDefs(x).Name)
                    If rs.RecordCount > 0 Then
                        For z = 0 To rs.Fields.Count - 1
    
                            sFieldName = rs.Fields(z).Name
                            If InStr(1, sFieldName, FIELD_TO_FIND, vbTextCompare) > 0 Then
                                Print #1, db.TableDefs(x).Name
                                Exit For
                            End If
                        Next z
                    End If
            End If
        Next x
    
    Close #1
    
    MsgBox "Done"
    
    End Sub
    

    您可以进行相应的调整以使其满足您的需求。

    【讨论】:

      【解决方案3】:

      这是其他答案的变体,但我相信使用 For/Each 循环比使用计数器更好:

        Dim rs As DAO.Recordset
        Dim fld As DAO.Field
      
        Set rs = CurrentDB.OpenRecordset("SELECT * FROM tblMain")
        For Each fld In rs.Fields
          Debug.Print fld.Name
        Next fld
        Set fld = Nothing
        rs.Close
        Set rs = Nothing
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        • 2011-06-18
        • 2016-05-18
        • 2014-09-09
        • 1970-01-01
        相关资源
        最近更新 更多