Конференция "Базы" » Закрытие подключения через ADO
 
  • DmitriyG. © (08.02.11 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. © (08.02.11 23:01) [1]
    В примере в одном месте необходимо SomeDB заменить на ArcTempDB :-)
  • Плохиш © (08.02.11 23:48) [2]
    Перед удалением надо подсоединить используемый ADOConnection к другой, отличной от удаляемой, базе.
  • sniknik © (09.02.11 09:34) [3]
    не обязательно, даже закрывать...
    т.к. показанные тут команды делаются изначально из коннекта к другой базе (мастеру к примеру). ну вот как создать базу из коннекта к себе же, еще не существующей? и нет совершенно ничего, что бы захватывало эту.

    т.е. как обычно показанные куски кода не имеют никакого отношения к реальной проблеме.
  • DmitriyG. © (09.02.11 12:58) [4]
    ADOConnection переключал на другую базу - не помогает...
    Создание базы естественно делается через подключение к другой базе... А создание схемы как раз и захватывает новую созданную базу...
  • sniknik © (09.02.11 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 © (09.02.11 13:15) [6]
    вообще описаниями и доказательствами, типа "у меня  все правильно, но почему то не работает" ничего не добьешься.  ну разве что советов типа "попробуй при другой фазе луны".

    КОД !!! который можно проверить/повторить "глюк". вот что реально помогает.
  • KSergey © (15.02.11 16:20) [7]
    На сколько я помню, ADO удерживает соединение какое-то время на случай, если снова подконнектиться надумаешь.
    Рулится или нет таймаут - не помню.
  • DmitriyG. © (15.02.11 22:14) [8]
    Ну вобщем решил переводом базы перед удалением в режим SINGLE USER
    А по поводу схемы она создается в новой БД.... Просто ADOQuery2 настроен на подключение к новой (создаваемой БД).... А само создание базы данных и удаление производится через другое соединение
 
Конференция "Базы" » Закрытие подключения через ADO
Есть новые Нет новых   [134431   +15][b:0][p:0.002]