Мне нужен код для циклического преобразования всех записей в таблице, чтобы я мог извлечь некоторые данные. В дополнение к этому, также возможно прокручивать отфильтрованные записи и, опять же, извлекать данные? Спасибо!
Код для циклического преобразования всех записей в MS Access
Ответ 1
Вы должны сделать это с помощью довольно стандартного цикла набора записей 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
Ответ 2
В "Ссылки" импортируйте ссылку на объект 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" для запуска запроса и использования его в качестве набора записей (немного сложнее). Скажите мне, хотите ли вы еще одного aproach.
Надеюсь, я помог.
Ответ 3
Нашел хороший код с комментариями, объясняющими каждое утверждение. Код найден на - 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 (конечный файл) и BOF (начало файл). Записи так же, как и таблицы, и когда вы перебираете один из них, вы буквально переходите от записи к записи в последовательности. Когда вы перемещаете записи, свойство EOF имеет значение false, но после того, как вы попытаетесь пройти мимо последней записи, свойство EOF станет истинным. Это работает в обратном порядке для свойства BOF.
Эти свойства сообщают нам, когда мы достигли пределов набора записей.