![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Закрытие подключения через ADO
DmitriyG. © (2011-02-08 22:59:00)Создаю временую БД на MSSQL сервере, затем с помощью TADOQuery (ADOQuery2) создаю в базе новую схему. После чего пытаюсь удалить БД - но ничего не получается - говорит используется БД... Я уже и Free и Close делал и через ADOConnection пробовал - все равно соединение висит. Если же создание схемы реализовать через TQuery и вызвать DataBase.Connected := False, то все нормально.... Как победить проблему с ADO?
//удаляем временную БД
Request3 := 'IF DB_ID (N''ArcTempDB'') IS NOT NULL DROP DATABASE SomeDB';
Query1.SQL.Text := Request3;
Query1.ExecSQL;
//создаем временную БД
Request1 := 'CREATE DATABASE ArcTempDB COLLATE SQL_Latin1_General_CP1251_CI_AS';
Query1.SQL.Text := Request1;
Query1.ExecSQL;
//создаем объект (с использованием ADO)
Request2 := ' CREATE SCHEMA Common';
ADOQuery2.SQL.Text := Request2;
ADOQuery2.ExecSQL;
ADOQuery2.Close;
Database2.Connected := False;
//пытаемся удалить БД (в случае использования ADO - вылетает
Request3 := 'IF DB_ID (N''ArcTempDB'') IS NOT NULL DROP DATABASE ArcTempDB';
Query1.SQL.Text := Request3;
Query1.ExecSQL;
DmitriyG. (2011-02-15 22:14:00) [1]Ну вобщем решил переводом базы перед удалением в режим SINGLE USER
А по поводу схемы она создается в новой БД.... Просто ADOQuery2 настроен на подключение к новой (создаваемой БД).... А само создание базы данных и удаление производится через другое соединение
KSergey (2011-02-15 16:20:00) [2]На сколько я помню, ADO удерживает соединение какое-то время на случай, если снова подконнектиться надумаешь.
Рулится или нет таймаут - не помню.
sniknik (2011-02-09 13:15:00) [3]вообще описаниями и доказательствами, типа "у меня все правильно, но почему то не работает" ничего не добьешься. ну разве что советов типа "попробуй при другой фазе луны".
КОД !!! который можно проверить/повторить "глюк". вот что реально помогает.
sniknik (2011-02-09 13:10:00) [4]> А создание схемы как раз и захватывает новую созданную базу...
каким образом?
CREATE SCHEMA (Transact-SQL)
SQL Server 2008 R2
Другие версии
* SQL Server 2008
* SQL Server 2005
Создает схему в текущей базе данных. При помощи транзакции CREATE SCHEMA также можно создавать таблицы и представления в новой схеме и предоставлять разрешения GRANT, DENY или REVOKE на такие объекты.
а переключений/пере подключений нет (не показано = нет)
проверочное -
DROP SCHEMA
перед попыткой удалить "захваченную" базу
DmitriyG. (2011-02-09 12:58:00) [5]ADOConnection переключал на другую базу - не помогает...
Создание базы естественно делается через подключение к другой базе... А создание схемы как раз и захватывает новую созданную базу...
sniknik (2011-02-09 09:34:00) [6]не обязательно, даже закрывать...
т.к. показанные тут команды делаются изначально из коннекта к другой базе (мастеру к примеру). ну вот как создать базу из коннекта к себе же, еще не существующей? и нет совершенно ничего, что бы захватывало эту.
т.е. как обычно показанные куски кода не имеют никакого отношения к реальной проблеме.
Плохиш (2011-02-08 23:48:00) [7]Перед удалением надо подсоединить используемый ADOConnection к другой, отличной от удаляемой, базе.
DmitriyG. (2011-02-08 23:01:00) [8]В примере в одном месте необходимо SomeDB заменить на ArcTempDB :-)