Шаг 14 - Метод Idle

Описание
Приостанавливает выполнение новых инструкций обработки данных и позволяет ядру базы данных Microsoft Jet выполнить все незаконченные операции, такие как оптимизация памяти или интервалы ожидания страниц (только в рабочей области ядра Microsoft Jet).

DBEngine.Idle [dbRefreshCache]

Замечания
Вызов метода Idle позволяет предоставить ядру базы данных Microsoft Jet возможность завершить фоновые операции, которые не были завершены из-за большого объема операций обработки данных. Такая ситуация часто возникает при работе в многопользовательской и многозадачной среде, когда времени, выделенного на выполнение фоновых задач, недостаточно для своевременного обновления всех записей в текущем объекте Recordset.
Как правило, блокировки изменений снимаются, и данные в локальном объекте Recordset типа динамического набора записей обновляются только тогда, когда в системе не происходят никакие другие события (включая и перемещения указателя мыши). Периодический вызов метода Idle снимает лишние блокировки изменений, и ядро базы данных получает достаточное количество времени для того, чтобы выполнить фоновые задачи.
Если в качестве аргумента указать необязательную константу dbRefreshCache, принудительно выполняются все отложенные операции записи в файлы .mdb, а память обновляется с использованием последних данных из файла .mdb.
Данный метод применяется на автономных компьютерах только при одновременном запуске нескольких копий приложения. Метод Idle позволяет увеличить производительность в сети, поскольку ядро базы принуждается к записи данных на диск и снятию ненужных блокировок в памяти.
Снять блокировки изменений позволяет также включение операций в транзакцию.

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

Sub IdleX()

	Dim dbsNorthwind As Database
	Dim strCountry As String
	Dim strSQL As String
	Dim rstOrders As Recordset
	Set dbsNorthwind = OpenDatabase("Борей.mdb")
	' Принимает введенное пользователем название страны 
	' и использует его для создания инструкции SQL.
	strCountry = Trim(InputBox("Введите название страны:"))
	strSQL = "SELECT * FROM Заказы WHERE СтранаПолучателя = '" &  strCountry & "' ORDER BY КодЗаказа"
	' Открывает объект Recordset с помощью инструкции SQL.

	Set rstOrders = dbsNorthwind.OpenRecordset(strSQL)
	' Отображает содержимое объекта Recordset.
	IdleOutput rstOrders, strCountry
	rstOrders.Close
	dbsNorthwind.Close
End Sub

Sub IdleOutput(rstTemp As Recordset, strTemp As String)
	' Вызывает метод Idle для снятия ненужных блокировок, 
	' принудительного  выполнения отложенных операций записи, 
	' и обновления памяти текущими данными из файла .mdb.
	DBEngine.Idle dbRefreshCache
	' Отображает содержимое объекта Recordset.

With rstTemp
		Debug.Print "Страна " & strTemp & ":"
		Debug.Print , "КодЗаказа", "КодКлиента", "ДатаРазмещения"
		Do While Not .EOF
			Debug.Print , !КодЗаказа, !КодКлиента, !ДатаРазмещения
			.MoveNext
		Loop
	End With
End Sub

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