Возможно, это слишком поздно для спрашивающего, но, возможно, это поможет другим.
Каждый раз, когда появляется курсор, который не закрывается, комбинация BDE / ODBC устанавливает новое соединение для последовательных запросов. «Смена спида», вероятно, является результатом незамкнутого курсора.
Чтобы решить эту проблему, вы должны найти BDE-компонент, который вызвал этот открытый курсор. Затем вы вызываете метод, который в конечном итоге закроет курсор (TTable.Close
, TTable.Last
...).
После этого «смена спида» должна исчезнуть и, следовательно, тупик.
Несколько советов по поиску этого компонента:
- Во время блокировки выполните следующую инструкцию (например, с помощью Management Studio):
EXEC sp_who2
.
- Посмотрите в столбце
BlkBy
. В заблокированном соединении есть номер.
- Этот номер является
spid
(идентификатор процесса сервера) блокирующего соединения.
- Затем вы выполните
DBCC INPUTBUFFER(spid)
.
- В столбце
EventInfo
вы найдете SQL-оператор, выданный вашей программой.
- С этой информацией вы сможете найти BDE-компонент, который вызывает ваши проблемы.