|
|||||||
Шаг 122 - Метод GetRows
Время создания: 01.08.2020 17:19
Текстовые метки: VBA_access, GetRows, Recodset
Раздел: Разные закладки - VBA - Access
Запись: xintrea/mytetra_db_adgaver_new/master/base/1596291556ilzp4bhbsk/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Шаг 122 - Метод GetRows Описание Set имяМассива = наборЗаписей.GetRows (числоСтрок)
Параметры Замечания avarRecords(intField, intRecord)
Для того чтобы возвратить значение первого поля во второй записи, следует использовать такие значения индексов: field1 = avarRecords(0,1)
Значение второго поля в первой записи возвращается с помощью следующей инструкции: field2 = avarRecords(1,0)
При возвращении данных методом GetRows переменная avarRecords автоматически превращается в двумерный массив. numReturned = UBound(varA,2) + 1
Единицу следует добавить, поскольку нумерация элементов массива начинается с нуля. Число возвращаемых строк ограничивается только доступной памятью и должно выбираться в соответствии с реальными потребностями. Не рекомендуется копировать всю таблицу в массив с помощью метода GetRows, особенно, если это большая таблица. Пример Sub GetRowsX()
Dim dbsNorthwind As Database
Dim rstEmployees As Recordset
Dim strMessage As String
Dim intRows As Integer
Dim avarRecords As Variant
Dim intRecord As Integer
Set dbsNorthwind = OpenDatabase("Борей.mdb")
Set rstEmployees = dbsNorthwind.OpenRecordset( "SELECT Имя, Фамилия, Должность " & "FROM Сотрудники ORDER BY Фамилия", dbOpenSnapshot)
With rstEmployees
Do While True
' Принимает от пользователя число строк. strMessage = "Введите число загружаемых строк."
intRows = Val(InputBox(strMessage))
If intRows <= 0 Then Exit Do
' При успешном выполнении GetRowsOK печатает результаты; ' при обнаружении конца файла ничего не делается.
If GetRowsOK(rstEmployees, intRows, avarRecords) Then
If intRows > UBound(avarRecords, 2) + 1 Then
Debug.Print "(Недостаточно записей в объекте " & "Recordset для загрузки " & intRows & " строк.)"
End If
Debug.Print UBound(avarRecords, 2) + 1 & " записей обнаружено."
' Печатает загруженные данные. For intRecord = 0 To UBound(avarRecords, 2)
Debug.Print " " & avarRecords(0, intRecord) & " " & _
avarRecords(1, intRecord) & ", " & avarRecords(2, intRecord)
Next intRecord
Else
' В предположении, что GetRows возвращает ошибку ' из-за изменения данных другим пользователем,
' вызывает метод Requery для обновления
' объекта Recordset и возобновления операции.
If .Restartable Then
If MsgBox("Ошибка в методе GetRows. Повторить?", vbYesNo) = vbYes Then
.Requery
Else
Debug.Print "Ошибка в методе GetRows!"
Exit Do
End If
Else
Debug.Print "Ошибка в методе GetRows! " & "Неверное значение свойства Restartable!"
Exit Do
End If
End If
' Так как после вызова GetRows указатель текущей записи ' остается на последней проверенной записи, переводит
' указатель в начало объекта Recordset перед
' выполнением нового цикла поиска.
.MoveFirst
Loop
End With
rstEmployees.Close
dbsNorthwind.Close
End Sub
Function GetRowsOK(rstTemp As Recordset, intNumber As Integer, avarData As Variant) As Boolean
' Сохраняет результаты вызова GetRows в массиве. avarData = rstTemp.GetRows(intNumber)
' Возвращает False, только если возвращено менее указанного ' количества строк, но не при достижении конца объекта
' Recordset.
If intNumber > UBound(avarData, 2) + 1 And Not rstTemp.EOF Then
GetRowsOK = False
Else
GetRowsOK = True
End If
End Function |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|