MS ACCESS 2007 VBA: набор записей DAO .... как я могу просмотреть все "поля" в возвращенной коллекции - PullRequest
1 голос
/ 25 июня 2010

поэтому, если я сделаю SQL-выражение, например, так:

sql = "SELECT * FROM tblMain"

     set rs = currentdb.openrecordset(sql)

, какой метод я могу использовать для просмотра каждого "имени поля" в этой коллекции, которую я только что создал.я получаю очень странную ошибку о том, что элемент не найден в этой коллекции.

я знаю, что поле существует в таблице, я трижды проверял орфографию везде, когда ссылаюсь на нее, и SQL должен бытьтянет все, но я хочу видеть это.

есть ли метод debug.print, чтобы увидеть все эти поля

спасибо Джастин

Ответы [ 3 ]

9 голосов
/ 26 июня 2010

Это вариант других ответов, но я считаю, что лучше использовать цикл 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
6 голосов
/ 25 июня 2010

Вы можете перебирать коллекцию полей набора записей.

Код ОТТОМНЫЙ

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, выберите add watch и просмотрите все это в Часы Окно.

1 голос
/ 25 июня 2010

Вот скрипт, который будет искать поле, содержащее строку, указанную в каждой таблице в базе данных 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

Вы можете настроить его так, чтобы он делал то, что вам нужно.

...