MyTetra Share
Делитесь знаниями!
Код для перебора всех записей в MS Access
Время создания: 07.03.2020 23:27
Текстовые метки: VBA, DAO, EOF
Раздел: !Закладки - VBA - Access - DAO
Запись: xintrea/mytetra_db_adgaver_new/master/base/1583472223q1jvr5u5ev/text.html на raw.githubusercontent.com

Код для перебора всех записей в MS Access

Вопрос задан: 8 лет назад Последняя активность: 1 год назад

41

Мне нужен код для перебора всех записей в таблице, так что я могу извлечь некоторые данные. В дополнение к этому, это также возможно через петлю отфильтрованных записей и, опять же, извлекать данные? Благодарность!

ms-access vba



Вы должны быть в состоянии сделать это с довольно стандартной петлей DAO записей. Вы можете увидеть некоторые примеры по следующим ссылкам:
http://msdn.microsoft.com/en-us/library/bb243789%28v=office.12%29.aspx
http://www.granite.ab.ca/access/email/recordsetloop.htm

Мой собственный стандарт цикл выглядит примерно так:



Dim rs As DAO.Recordset

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

 

'Check to see if the recordset actually contains rows

If Not (rs.EOF And rs.BOF) Then

    rs.MoveFirst 'Unnecessary in this case, but still a good habit

    Do Until rs.EOF = True

        'Perform an edit

        rs.Edit

        rs!VendorYN = True

        rs("VendorYN") = True 'The other way to refer to a field

        rs.Update

 

        'Save contact name into a variable

        sContactName = rs!FirstName & " " & rs!LastName

 

        'Move to the next record. Don't ever forget to do this.

        rs.MoveNext

    Loop

Else

    MsgBox "There are no records in the recordset."

End If

 

MsgBox "Finished looping through records."

 

rs.Close 'Close the recordset

Set rs = Nothing 'Clean up

 

поделитьсяHK1, 03 May 2011 в 12:21

10

В «Список литературы», импорт DAO ссылка 3.6 объект.

private sub showTableData

 

dim db as dao.database

dim rs as dao.recordset

 

set db = currentDb

set rs = db.OpenRecordSet("myTable") 'myTable is a MS-Access table created previously

 

'populate the table

rs.movelast

rs.movefirst

 

do while not rs.EOF

   debug.print(rs!myField) 'myField is a field name in table myTable

   rs.movenext             'press Ctrl+G to see debuG window beneath

loop

 

msgbox("End of Table")

 

end sub

 

Вы можете перебирать объекты данных, такие как запросы и отфильтрованные таблицы по-разному:

С помощью запроса:

private sub showQueryData

 

dim db as dao.database

dim rs as dao.recordset

dim sqlStr as string

 

sqlStr = "SELECT * FROM customers as c WHERE c.country='Brazil'"

 

set db = currentDb

set rs = db.openRecordset(sqlStr)

 

rs.movefirst

 

do while not rs.EOF

  debug.print("cust ID: " & rs!id & " cust name: " & rs!name)

  rs.movenext

loop

 

msgbox("End of customers from Brazil")

 

end sub

 

Вы должны также искать свойства «Фильтр» объекта набора записей для фильтра только нужные записи, а затем взаимодействовать с ними таким же образом (см VB6 справку в окне кода MS-Access), или создать «QueryDef» объект побегать запрос и использовать его в качестве записей тоже (немного сложнее). Скажите мне, если вы хотите другой ПОДХОД.

Я надеюсь, что я помог.

поделитьсяAlex, 03 May 2011 в 12:33

5

Нашли хороший код с комментариями, объясняющих каждое заявление. Код найдено по адресу - accessallinone

Sub DAOLooping()

On Error GoTo ErrorHandler

 

Dim strSQL As String

Dim rs As DAO.Recordset

 

strSQL = "tblTeachers"

'For the purposes of this post, we are simply going to make

'strSQL equal to tblTeachers.

'You could use a full SELECT statement such as:

'SELECT * FROM tblTeachers (this would produce the same result in fact).

'You could also add a Where clause to filter which records are returned:

'SELECT * FROM tblTeachers Where ZIPPostal = '98052'

' (this would return 5 records)

 

Set rs = CurrentDb.OpenRecordset(strSQL)

'This line of code instantiates the recordset object!!!

'In English, this means that we have opened up a recordset

'and can access its values using the rs variable.

 

With rs

 

 

    If Not .BOF And Not .EOF Then

    'We don’t know if the recordset has any records,

    'so we use this line of code to check. If there are no records

    'we won’t execute any code in the if..end if statement.   

 

        .MoveLast

        .MoveFirst

        'It is not necessary to move to the last record and then back

        'to the first one but it is good practice to do so.

 

        While (Not .EOF)

        'With this code, we are using a while loop to loop

        'through the records. If we reach the end of the recordset, .EOF

        'will return true and we will exit the while loop.

 

            Debug.Print rs.Fields("teacherID") & " " & rs.Fields("FirstName")

            'prints info from fields to the immediate window

 

            .MoveNext

            'We need to ensure that we use .MoveNext,

            'otherwise we will be stuck in a loop forever…

            '(or at least until you press CTRL+Break)

        Wend

 

    End If

 

    .close

    'Make sure you close the recordset...

End With

 

ExitSub:

    Set rs = Nothing

    '..and set it to nothing

    Exit Sub

ErrorHandler:

    Resume ExitSub

End Sub

 


Есть два набора записей важных свойств при пробегаем по данным, EOF (End-Of-File) и BOF (Начало-Of-File). Набор записи, как столы и когда петля через один, вы в буквальном смысле перехода от записи к записи в последовательности. При перемещении по записям свойства EOF имеет значение ЛОЖЬ, но после того, как вы пытаетесь пройти мимо последней записи, свойство EOF становится истинным. Это работает так же в обратном направлении для свойства BOF.

Эти свойства позволяют нам знать, когда мы достигли пределов набора записей.

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования