У заказчика большое приложение на 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...
Возможно есть какой-то более правильное решение? Например как-то явно указать, что все запросы в "этой транзакции" должны выполняться в одной сессии?