Шаг 8 - Блокировка SQL Server и ACCESS расследование

Итак, в "Шаг 7 - Клиент ACCESS и блокировки". Мы увидели, что блокировка появляется, если считывается большое количество записей. А достаточно пройти вперед и назад по записям, как тут же она пропадает. Задача которую я себе поставил выяснить кто виноват в такой блокировке. Сам Access как таковой или нет. И тут же запутался с документацией и книгами. Поэтому, если окажется что я ошибся, Вы догадываетесь кто виноват.

Первое что я вычитал - Независимо от того как установлена блокировка при работе с данными, которые поступают из связанных БД ODBC, режим блокировки MS ACCESS игнорируется. (Ресурсы Microsoft Office 97 стр. 656).

Вроде как ACCESS не виноват. Тут поняв это я сделал тестировочную программу используя ODBC. Я приложу ее код. Подробнее о программировании ODBC читайте соответствующий раздел.

.......
	CDatabase cdbMyDB;
	cdbMyDB.OpenEx("DSN=test");
	if (cdbMyDB.IsOpen()) 
	{
		cout << "Ok Connect" << endl;
	        CRecordset cr(&cdbMyDB);
		cr.Open(CRecordset::forwardOnly,"{call TEMPS}",CRecordset::readOnly);
		if (cr.IsOpen()) 
		{
			cout << "Ok Open" << endl;
			int i;
			cin << i;
			cr.Close();
		}

	}
........

При таком коде будет блокировка.

8_1.gif (2398 b)

Но опять же только в том случае, если мы открываем таблицу в режиме CRecordset::forwardOnly. В режиме с форвардной прокруткой. Достаточно изменить на CRecordset::dynaset. Блокировки больше не будет. Получается все-таки виноват ACCESS, так как он отрывает запрос в режиме forwardOnly. По крайней мере по умолчанию.


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