我现在使用ADOConnection1连接一个sqlserver数据库[abc],并使用一个ADOQuery打开一个数据集。
   然后我在利用另外一个ADOConnection2连接上 [master]库,在把 ADOQuery执行close操作,在把ADOConnection1关闭。
   在通过ADOConnection2执行删除[abc]数据库操作,可总是提示我当前数据库被锁定。   我该怎么办,初步认为是我的ADOConnection1和ADOQuery没有完全关闭掉。请大家给个好思路。

解决方案 »

  1.   

    adoconnection.connected := False;
      

  2.   

    adoquery1.close;
    adoconnectin1.connected:=false;
      

  3.   

    adoconnection.connected:=false
    或者你设置adoconnection的keepconnection属性为false,这样当每个引用你的adoconnection
    的数据集全部关闭的时候,你的adoconnection会自动关闭的,对于这个桌面的单用户数据库
    ,你用好一定要关闭,呵呵,这样才可以防止报错!
      

  4.   

    如果是断开连接的话
    adoconnection.connected:=false
    如果是彻底的关闭一个数据库的话需要KILL这个数据库的进程create  proc  killspid  (@dbname  varchar(20))
    as
    begin
    declare  @sql  nvarchar(500),@temp varchar(1000)
    declare  @spid  int
    set  @sql='declare  getspid  cursor  for
    select  spid  from  sysprocesses  where  dbid=db_id('''+@dbname+''')'
    exec  (@sql)
    open  getspid
    fetch  next  from  getspid  into  @spid
    while  @@fetch_status =0
    begin
      set @temp='kill  '+rtrim(@spid)
      exec(@temp)
    fetch  next  from  getspid  into  @spid
    end
    close  getspid
    deallocate  getspid
    end
      

  5.   

    连接可以切换的。
    比如,你当前的adoConnection连接的是 adc,可以用 use master 语句切换数据库,然后可以对abc语句实行删除,这个情况在数据库的恢复时很常用。