Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.04.13;
Скачать: CL | DM;

Вниз

Закрытие подключения через ADO   Найти похожие ветки 

 
DmitriyG. ©   (2011-02-08 22:59) [0]

Создаю временую БД на 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-08 23:01) [1]

В примере в одном месте необходимо SomeDB заменить на ArcTempDB :-)


 
Плохиш ©   (2011-02-08 23:48) [2]

Перед удалением надо подсоединить используемый ADOConnection к другой, отличной от удаляемой, базе.


 
sniknik ©   (2011-02-09 09:34) [3]

не обязательно, даже закрывать...
т.к. показанные тут команды делаются изначально из коннекта к другой базе (мастеру к примеру). ну вот как создать базу из коннекта к себе же, еще не существующей? и нет совершенно ничего, что бы захватывало эту.

т.е. как обычно показанные куски кода не имеют никакого отношения к реальной проблеме.


 
DmitriyG. ©   (2011-02-09 12:58) [4]

ADOConnection переключал на другую базу - не помогает...
Создание базы естественно делается через подключение к другой базе... А создание схемы как раз и захватывает новую созданную базу...


 
sniknik ©   (2011-02-09 13:10) [5]

> А создание схемы как раз и захватывает новую созданную базу...
каким образом?

CREATE SCHEMA (Transact-SQL)
SQL Server 2008 R2
Другие версии

   * SQL Server 2008
   * SQL Server 2005

Создает схему в текущей базе данных. При помощи транзакции CREATE SCHEMA также можно создавать таблицы и представления в новой схеме и предоставлять разрешения GRANT, DENY или REVOKE на такие объекты.

а переключений/пере подключений нет (не показано = нет)

проверочное -
DROP SCHEMA
перед попыткой удалить "захваченную" базу


 
sniknik ©   (2011-02-09 13:15) [6]

вообще описаниями и доказательствами, типа "у меня  все правильно, но почему то не работает" ничего не добьешься.  ну разве что советов типа "попробуй при другой фазе луны".

КОД !!! который можно проверить/повторить "глюк". вот что реально помогает.


 
KSergey ©   (2011-02-15 16:20) [7]

На сколько я помню, ADO удерживает соединение какое-то время на случай, если снова подконнектиться надумаешь.
Рулится или нет таймаут - не помню.


 
DmitriyG. ©   (2011-02-15 22:14) [8]

Ну вобщем решил переводом базы перед удалением в режим SINGLE USER
А по поводу схемы она создается в новой БД.... Просто ADOQuery2 настроен на подключение к новой (создаваемой БД).... А само создание базы данных и удаление производится через другое соединение



Страницы: 1 вся ветка

Текущий архив: 2014.04.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.005 c
2-1372357654
fvffdfhy
2013-06-27 22:27
2014.04.13
Запрос на уникальные позиции


2-1362234386
lamer6666
2013-03-02 18:26
2014.04.13
TouchKeyboard и DBLookupCombobox при вводе заменяет текст


15-1382596973
Kerk
2013-10-24 10:42
2014.04.13
Развитие Delphi от Delphi 1 до Delphi XE5


2-1372673534
Анастасия
2013-07-01 14:12
2014.04.13
Дельфи начинающим


15-1381896201
KilkennyCat
2013-10-16 08:03
2014.04.13
в Си функция объявлена как static