我用adoconnection连接当前SQL服务器,再用adoquery连接adoconnection,在delphi里面用CREATE DATABASE text代码成功创建SQL数据库和一些表格。
但是当我数据库创建成功时,要马上删除当前创建的数据库text就会出错,无法删除,错误提示,该数据库正在使用,无法删除。请问要怎么办,才可以删除掉这个数据库

解决方案 »

  1.   

    adoquery.close;
    adoquery.sql.clear;
    adoquery.sql.add('DROP DATABASE text');
    adoquery.execsql;
      

  2.   

    断开你所要删除的数据库的所有连接,然后:
    use master
    go
    drop database test
    go
      

  3.   

    use master
    你需要杀死连在这个库上的进程
    go
    drop database test
    go
      

  4.   

    这样:
    select  spid  from  MASTER..sysprocesses where dbid=db_id(text)
    如果结果大于0则有进程连到text
    kill 这个spid(smallint类型的)
      

  5.   

    至于断开连接,可以:
    with aq1 do
    begin
      close;
      sql.clear;
      sql.text:='sp_who';
      open;
      fileter:='dbname=''text''';
      filetered:=true;
      first;
    end;
    while not aq1.eof do
    begin
      with aq2 do
      begin
        close;
        sql.clear;
        sql.text:='kill '+aq1.fieldbyName('spid').AsString;
        try 
          execSQL;
        except
        end;
        aq1.next;
      end;
    end;
      

  6.   

    楼上的几位兄台,我用use master drop database text 这样不行啊,数据库根本没删掉
      

  7.   

    我找出问题了,原来是在创建完数据库后创建表格,我用的是以下代码(如果我把这些删掉的话,创建好的数据库就可以马上删除)
    m_datamodule1.ADOConnection4.Close;
                m_datamodule1.ADOConnection4.ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='+trim(edit4.text)+';Data Source='+s;
                m_datamodule1.adoconnection4.connected:=true;
                m_datamodule1.adocommand2.commandtext := '';
                str1:= TStringList.Create;
                str1.LoadFromFile(ExtractFilePath(application.ExeName)+'文本\table.TXT');
                for i := 0 to str1.count-1 do
                  if uppercase(str1.strings[i])='GO' then
                    if i > 0 then
                    begin
                      m_datamodule1.adocommand2.execute;
                      m_datamodule1.adocommand2.commandtext := '';
                    end
                    else
                  else m_datamodule1.adocommand2.commandtext := m_datamodule1.adocommand2.commandtext + str1.strings[i]+#13#10;
                if m_datamodule1.adocommand2.commandtext <> '' then
                  m_datamodule1.adocommand2.execute;
                str1.free;其中的table.text是一个记事本(我是把创建表格,过程和触发器的sql语句全部搞到记事本里面,当然,这个功能与实现,现在就是我在创建好数据库后,和这些表和存储过和触发器后,要马上删除当前数据这个数据库时就会提示,该数据库正在使用,如果我关闭改程序,再重新运行该程序就可以删除刚才创建的数据库。当然,我再建一个时,还是不能马上删掉,如果把这一段代码删掉,就不会出错,马上可以删除,这是为什么,要怎么改呢)