Шаг 126 - Метод Requery

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

наборЗаписей.Requery новыйЗапрос

Параметры
наборЗаписей
Объектная переменная, представляющая в рабочей области ядра Microsoft Jet объект Recordset типа динамического набора записей, статического набора записей или статического набора записей с последовательным доступом или объект Recordset в рабочей области ODBCDirect.
новыйЗапрос
Необязательный. Выражение или переменная типа Variant, представляющая значение свойства Name объекта QueryDef (только в рабочей области ядра Microsoft Jet).

Замечания
Использование данного метода позволяет быть уверенным в том, что объект Recordset содержит самые свежие данные. Данный метод заполняет текущий объект Recordset либо с помощью запроса с текущими параметрами, либо (в рабочей области Microsoft Jet) с использованием параметров запроса, указанного в аргументе новыйЗапрос.
Если в рабочей области ODBCDirect исходный запрос выполнялся в асинхронном режиме, метод Requery также запускает асинхронный запрос.
Если не указать аргумент новыйЗапрос, объект Recordset заполняется с использованием определения запроса и параметров, применявшихся при начальном заполнении объекта Recordset. При повторном заполнении учитываются любые изменения в базовых таблицах. Если объект QueryDef не был использован для создания объекта Recordset, то объект Recordset создается заново.
Если аргумент новыйЗапрос задает исходный объект QueryDef, то объект Recordset обновляется с использованием параметров, указанных в объекте QueryDef. При повторном заполнении учитываются любые изменения в базовых таблицах. Для заполнения объекта Recordset с новыми параметрами запроса необходимо указать другое значение аргумента новыйЗапрос.
Если указать объект QueryDef, отличный от использовавшегося для создания исходного объекта Recordset, то объект Recordset создается заново.
После вызова метода Requery первая запись объекта Recordset становится текущей записью.
Метод Requery нельзя применять к объектам Recordset типа динамических или статических наборов записей, у которых свойство Restartable имеет значение False. Однако если указан необязательный аргумент новыйЗапрос, то свойство Restartable игнорируется.
Если после применения метода Requery оба свойства BOF и EOF объекта Recordset имеют значение True, то в результате выполнения запроса не будет возвращена ни одна запись, и объект Recordset не будет содержать данных.

Пример
Следующая программа демонстрирует использование метода Requery для обновления данных запроса после изменения базового источника данных.

Sub RequeryX()

	Dim dbsNorthwind As Database
	Dim qdfTemp As QueryDef
	Dim rstView As Recordset
	Dim rstChange As Recordset

	Set dbsNorthwind = OpenDatabase("Борей.mdb")
	Set qdfTemp = dbsNorthwind.CreateQueryDef("", 	"PARAMETERS ПросмотрСтраны Text; " & _
		"SELECT Имя, Фамилия, Страна FROM Сотрудники " & "WHERE Страна = [ПросмотрСтраны] " & _
		"ORDER BY Фамилия")

	qdfTemp.Parameters!ПросмотрСтраны = "USA"
	Debug.Print "Исходный запрос, " & [ПросмотрСтраны] = USA"
	Set rstView = qdfTemp.OpenRecordset
	Do While Not rstView.EOF
		Debug.Print "    " & rstView!Имя & " " & rstView!Фамилия & ", " & rstView!Страна
		rstView.MoveNext
	Loop

	' Изменение данных.
	Set rstChange = dbsNorthwind.OpenRecordset("Сотрудники")
	rstChange.AddNew
	rstChange!Имя = "Nina"
	rstChange!Фамилия = "Roberts"
	rstChange!Страна = "USA"
	rstChange.Update

	rstView.Requery
	Debug.Print "Повторный запрос после изменения источника"

	Set rstView = qdfTemp.OpenRecordset
	Do While Not rstView.EOF
		Debug.Print "    " & rstView!Имя & " " & rstView!Фамилия & ", " & rstView!Страна
		rstView.MoveNext
	Loop

	' Восстанавливает исходные данные, 
	' измененные для демонстрации.
	rstChange.Bookmark = rstChange.LastModified
	rstChange.Delete
	rstChange.Close

	rstView.Close
	dbsNorthwind.Close

End Sub

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