Как правильно закрыть коннект в VC++ полностью!?
От: StepIn  
Дата: 12.03.02 14:32
Оценка:
Добрый день всем!
В VB все просто:

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


Как присвоить объекту Cn значение Nothing в VC++? (To completely eliminate an object from memory, set the object variable to Nothing (in Visual Basic) after closing the object. Цитата из MSDN Close Method.)
Спасибо!
Re: Как правильно закрыть коннект в VC++ полностью!?
От: Аноним  
Дата: 12.03.02 14:37
Оценка:
Здравствуйте StepIn, Вы писали:

SI>Как присвоить объекту Cn значение Nothing в VC++? (To completely eliminate an object from memory, set the object variable to Nothing (in Visual Basic) after closing the object. Цитата из MSDN Close Method.)


Если пользуешься обёртками типа 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++ полностью!?
От: StepIn  
Дата: 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. Что можно еще попробовать?
Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.