Шаг 124 - Методы MoveFirst, MoveLast, MoveNext, MovePrevious

Описание
Находят в указанном объекте Recordset первую, последнюю, следующую или предыдущую запись и делают эту запись текущей записью.

наборЗаписей.{MoveFirst | MoveLast [dbRunAsync] | MoveNext | MovePrevious}

Параметры
наборЗаписей
Представляет объектную переменную, задающую открытый объект Recordset.

Замечания
Методы группы Move применяются для перехода от записи к записи без указания условия поиска записей.
После изменения текущей записи следует обязательно сохранить изменения с помощью метода Update перехода к следующей записи. Если переход к другой записи осуществляется без обновления текущей записи, то все внесенные изменения будут потеряны без предупреждения.
При открытии объекта Recordset первая запись набора становится текущей, а свойство BOF получает значение False. Если объект Recordset не содержит ни одной записи, то свойство BOF получает значение True, а положение текущей записи становится неопределенным.
Если текущей записью является первая или последняя запись набора, то применение, соответственно, методов MoveFirst или MoveLast не изменяет положение текущей записи.
При вызове метода MovePrevious, когда текущей является первая запись набора, свойство BOF принимает значение True, а текущая запись становится неопределенной. При повторном вызове метода MovePrevious возникает ошибка; свойство BOF при этом сохраняет значение True.
При вызове метода MoveNext, когда текущей является последняя запись набора, свойство EOF принимает значение True, а текущая запись становится неопределенной. При повторном вызове метода MoveNext возникает ошибка; свойство EOF при этом сохраняет значение True.
Если аргумент наборЗаписей указывает на объект Recordset типа таблицы (только в рабочей области ядра Microsoft Jet), то перемещение по записям производится в соответствии с текущим индексом таблицы. Текущий индекс задается с помощью свойства Index таблицы. Если текущий индекс не указан, то порядок записей при переходах становится неопределенным.
Допускается использование метода MoveLast для полного заполнения объектов Recordset типа динамического набора записей или статического набора записей с включением в объект Recordset текущего количества записей. Однако при таком вызове метода MoveLast скорость выполнения приложения может существенно уменьшиться. Рекомендуется вызывать метод MoveLast для подсчета записей только в том случае, когда требуется аккуратный подсчет числа записей в новом открытом объекте Recordset. При вызове метода MoveLast с константой dbRunAsync метод выполняется в асинхронном режиме. Пользователь имеет возможность использовать метод StillExecuting для проверки, является ли объект Recordset полностью заполненным, и метод Cancel для отмены выполнения метода MoveLast в асинхронном режиме.
Не допускается вызов методов MoveFirst, MoveLast и MovePrevious для объектов Recordset типа статического набора записей с последовательным доступом.
Для перемещения положения указателя текущей записи объекта Recordset на заданное число записей вперед или назад следует применять метод Move.

Пример
Следующая программа использует методы MoveFirst, MoveLast, MoveNext и MovePrevious для перемещения указателя текущей записи в объекте Recordset на основании введенной команды. Для выполнения этой процедуры требуется процедура MoveAny.

Sub MoveFirstX()

	Dim dbsNorthwind As Database
	Dim rstEmployees As Recordset
	Dim strMessage As String
	Dim intCommand As Integer

	Set dbsNorthwind = OpenDatabase("Борей.mdb")
	Set rstEmployees = dbsNorthwind.OpenRecordset( "SELECT Имя, Фамилия FROM Сотрудники " & 	"ORDER BY Фамилия", dbOpenSnapshot)
	With rstEmployees
		' Заполняет объект Recordset.
		.MoveLast
		.MoveFirst
		Do While True
			' Отображает сведения о текущей записи 
			' и принимает выбранный пользователем способ.
			strMessage = "Имя: " & !Имя & " " & !Фамилия & vbCr & "Запись № " & _
				(.AbsolutePosition + 1) & " из " & .RecordCount & vbCr & vbCr & _
				"[1 - MoveFirst, 2 - MoveLast, " & vbCr & "3 - MoveNext, 4 - MovePrevious]"
			intCommand = Val(Left(InputBox(strMessage), 1))
			If intCommand < 1 Or intCommand > 4 Then Exit Do
			' Вызывает метод, выбранный пользователем.
			MoveAny intCommand, rstEmployees
		Loop
		.Close
	End With
	dbsNorthwind.Close

End Sub

Sub MoveAny(intChoice As Integer, rstTemp As Recordset)
	' Использует выбранный метод, перехватывает метки BOF и EOF.
	With rstTemp
		Select Case intChoice
			Case 1
				.MoveFirst
			Case 2
				.MoveLast
			Case 3
				.MoveNext
				If .EOF Then
					MsgBox "Уже достигнут конец набора записей!"
					.MoveLast
				End If
			Case 4
				.MovePrevious
				If .BOF Then
					MsgBox "Уже достигнуто начало набора записей!"
					.MoveFirst
				End If
		End Select
	End With

End Sub

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 24.03.2002