Как заставить MS Access использовать один и тот же сеанс для запросов в транзакции? - PullRequest
0 голосов
/ 07 мая 2020

Мы перенесли данные с MS Access на MS SQL Server. Отчеты / запросы / формы все еще находятся в базе данных Access. Таблицы были связаны путем указания ODB без DSN C Строка подключения.

Дело в том, что когда у нас есть такой код:

Dim db As DAO.Database
Set db = CurrentDb()

BeginTran
db.Execute("update table set field=" & value & " where condition") #  updating some data (query #1)
db.OpenRecordset("select * from table where field=" & value, dbOpenDynaset, dbSeeChanges) # reading just updated data (query #2)

, второй запрос завершается с ошибкой с исключением тайм-аута. . Я просмотрел активные запросы через SSM C и обнаружил, что запрос №1 был выполнен в другом сеансе, чем запрос №2 (и оба начали транзакцию)

как SQL Сервер READ COMMITTED как уровень изоляции по умолчанию, второй запрос ожидает, пока первый запрос зафиксирует / откатит транзакцию и освободит блокировку, в то время как код ожидает, пока второй запрос что-то вернет.

Есть ли способ решить эту проблему без изменения logi c (нам все еще нужно прочитать данные, которые мы только что обновили.

...