У нас есть код Delphi, который использует BDE для доступа к SQL Server 2008 с помощью драйвера ODBC собственного клиента SQL Server (версия 2005 года). Наша проблема заключается в том, что мы сталкиваемся с некоторыми проблемами взаимоблокировки в цикле, которые делают вставки для нескольких таблиц.BDE, Delphi, ODBC, SQL Native Client & Dead lock
Весь цикл выполняется в [TDatabase] .StartTransaction. Посмотрев на профилировщик SQL Server, мы ясно видим, что в один момент во время цикла изменяется идентификатор SPID (Session ID?), А затем мы, естественно, оказываемся в тупике. (Оба ИСП делать вставки в ту же таблицу)
Похоже, что BDE в каком-то момент делает второе подключение к БД ...
(Хотя я хотел бы, чтобы пропустить BDE, это в настоящее время не представляется возможным .)
Кто-нибудь имеет опыт поделиться?
Почему вы не использовали ADO? –
Поскольку кодовая база составляет около 13 лет и сильно зависит от BDE. Кроме того, нам необходимо поддерживать Interbase и MSSQL. – EspenS
Я немного смущен, когда вы произносите «изменение спида». это, вероятно, причина тупика .. вы не можете начать транзакцию в одном spid и попытаться сделать вставки в другом или завершить транзакцию в другом. Знаете ли вы, как вы заканчиваете двумя шпилями? вы не многопоточность, так вы создаете второе соединение с базой данных? –