@Fly3110
web developer

Как заставить Microsoft Access использовать одну ту же сессию для запросов?

У заказчика большое приложение на Access.
Данные перенесли SQL Server, в Access, соответственно, сделали linked tables (через DSN-less ODBC Connection String).

Проблема в том, что когда в приложении встречается такой код:

BeginTran
db.Execute("update ....... ") '  изменение каких-то данных (#запрос1)
db.CreateRecordset("select * ....") ' чтение этих же, только что измененных данных (#запрос2)


запрос падает с timeout exceeded. Посмотрел активные запросы через SQL Server Management Console, вижу, что #запрос1 начал транзакцию в сессии с id (допустим) 55, а #запрос2 выполняется в сессии с другим id (причем тоже начав там транзакцию)

Из-за того, что в SQL Server isolation level по умолчанию READ COMMITTED, логично, что второй запрос ждет завершения транзакции в первом, а код в Access ждет завершения второго запроса, который, в итоге, прерывается по таймауту.

Пытался переписать запросы на ADO, там можно isolation level указать и много других вкусных вещей делать, но тогда нужно изменять запросы, которые все написаны под Jet Engine...

Возможно есть какой-то более правильное решение? Например как-то явно указать, что все запросы в "этой транзакции" должны выполняться в одной сессии?
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы