我是在一个程序里想复盖正在用的数据库,如果没有任何程序访问数据库时就不会出错一旦有程序访问过数据库是系统就会出错,我是用ado连接的没有任何数据库连接的控件所以不知道在一个新的程序里怎样关闭数据库连接!

解决方案 »

  1.   

    把你的adoconnetion1.connected:=False在进行操作吧
      

  2.   

    adoconnection1.Connected := false;最后你的一句我没看懂什么意思呀
      

  3.   

    我想他说的是让你先将adoconnection1.Connected := false;
    然后再在程序运行时adoconnection1.Connected := true;
      

  4.   

    adoconnetion1.connected:=False 好像不能够真正地断开连接你可以在master中建立一个存储过程killspid:
    Create Procedure killspid (@dbname varchar(20))
    as
    begin
    declare @sql nvarchar(500)
    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<>-1
    begin
    exec('kill '+@spid)
    fetch next from getspid into @spid
    end
    close getspid
    deallocate getspid
    end
    这个存储过程主要是断开所有数据库的连接,
    然后在你覆盖数据库之前执行
     with frmDataModul.query do
     begin
       sql.clear
       sql.add(' use master');
       sql.Add('exec killspid ''yourDBname''');
       ExecSQL ;
     end
     
    我就是这样做的,你可以试试 
      

  5.   

    如果是自己的程序在用,可以关闭与数据库相联的控件,关闭当然是通过使控件的
    Connected 为False或使控件的Active为False;
    如果是别的应用程序则提出警告(可以通过try 覆盖 except 警告 end 的方式)
    要不将更新的数据库命名成一个别的文件名,然后检查此文件,若文件存在删除原文件,改命
      

  6.   

    adoconnetion1.connected:=False若没用adoconnetion ,则将adoquery1.active:=false;
      

  7.   

    谢谢各位的发言关键是我根本没用Tadoconnetion控件呀我先试试杀死进程的方法问题了解就散分谢谢!
      

  8.   

    我觉得使用程序杀进程的方式不是很好
    这种维护性的工作最后放在管理工具里面,或者使用sql server直接操作
    个人观点
      

  9.   

    adoconnetion1.connected:=False
    不行,我正在用。
    根本做不到啊!
      

  10.   

    adoconnetion1.connected:=False应该可以的!
      

  11.   

    to liangzai6640459(亮仔)
    我试了,可它还是提示这个库正在被使用啊!!
      

  12.   

    adoconnection1.Connected := false;或adoconnection1.close;
    或运行新程序关掉连接数据库的程序
      

  13.   

    adoconnetion1.connected:=False  就可以关闭了