Dim Cn As New ADODB.Connection
strCnxn = "Driver={SQL Server};Server=Step;Database=Base;User Id=sa;Password=;"
Cn.Open strCnxn
Cn.Close
Cn.Cancel
Set Cn = Nothing
Если пользуешься обёртками типа CComPtr или #import, то можно присвоить NULL или вообще ничего не делать, объект автоматически освободится при выходе программы за пределы блока. Если пользуешься голым указателем на интерфейс, то вызови ->Release();
Re[2]: Как правильно закрыть коннект в VC++ полностью!?
От:
Аноним
Дата:
13.03.02 17:01
Оценка:
Здравствуйте Аноним!
Дело в том, что после применения метода Close к объекту Cn происходит нормальное закрытие коннекта. State Property имеет значение adStateClosed. Но база Base, которую я открываю в коннекте еще в течение 2-3 минут остается "used by the process". Как следствие, я не могу сразу удалить эту базу. Аналогичная ситуация возникает при использовании вызова ->Release();. Т.е. все проходит правильно и корректно, объект действительно освобождается. А база то – «it is currently in use». Такую же ситуацию можно наблюдать в приведенном ранее тексте на VB, если закоментарить последний оператор: Set Cn = Nothing. Что можно еще попробовать?
Спасибо!
Re[2]: Как правильно закрыть коннект в VC++ полностью!?
Дело в том, что после применения метода Close к объекту Cn происходит нормальное закрытие коннекта. State Property имеет значение adStateClosed. Но база Base, которую я открываю в коннекте еще в течение 2-3 минут остается "used by the process". Как следствие, я не могу сразу удалить эту базу. Аналогичная ситуация возникает при использовании вызова ->Release();. Т.е. все проходит правильно и корректно, объект действительно освобождается. А база то – «it is currently in use». Такую же ситуацию можно наблюдать в приведенном ранее тексте на VB, если закоментарить последний оператор: Set Cn = Nothing. Что можно еще попробовать?
Спасибо!