sp_defaultdb [@loginame =] 'login' , [@defdb =] 'database'分离前先用上面的命令改变默认数据库为Master试试.

解决方案 »

  1.   

    我的系统目前的问题在于:
        我虽然关闭了程序到SQL SERVER 2000的连接,可是在SQL SERVER上的数据库并没有关闭,也许是可以用存储过程来完成,可是我该将相应控件的数据源如何设定,以及在重新定位到SQL SERVER的新数据库以后如何实时更新呢?此其一。
        在客户端使用存储过程来关闭服务器上的数据库权限够吗?此其二。
        当我创建了连接字符串,使用ADO连接到服务器之后,服务器会将数据库加载到当前内存,在程序关闭之前,我试过,根本关不掉数据库文件。此其三。    感谢nononono老兄的帮忙,但可惜的是一点作用也没有。    斑竹大哥,Where are you? Can you help me? Thanks before!    BTW:我的程序前台用VB6.0开发。
      

  2.   

    数据库正在使用,无法分离!原因:1.你可能使用了VB的数据环境2.你关闭连接的窗体中,有与数据源连接的控件解决方法:用close方法关闭数据环境和程式所有打开的连接执行关闭连接的窗体中,不要有与数据源连接的控件 (text,datagrid,....)"让Sql server进行动态的绑定和分离"这种方法不可取!不知道你为什么要这样做?控件的数据源不需变动,不同的乡镇时让Sql server进行绑定时使用相同的数据库名。
      

  3.   

    Lujun 老兄,谢谢你的建议,我今天又试验了一下,连接字符串已经为NOTHING,可是分离依然无法完成,参照SQL SERVER 2000的帮助,必须关闭所有的有效用户连接,才可以分离数据库。我编了一段小程序,用于调试。
    第一步:附加数据库;
    第二步:设定ADO连接,打开刚刚附加的数据库;
    第三步:关闭连接,设定连接字符串为NOTHING;
    第四步:分离数据库。依然出错。
    如果没有2、3两步,则分离成功。
    所以在2、3之后需要加一步,关闭服务器上的数据库文件。或者:如果不是使用这种方案,我的程序应该如何进行设计?
          也没有办法,SQL SERVER 2000 刚刚才增加了这个功能,所以连找一个好的例程都没有。
      

  4.   

    虽然你将数据库关闭,但是用户在数据库的连接并没用被释放,最简单的方法就是,在Enterprise Manager 中选择要分离的数据库,选择所有任务---〉分离数据库----〉断开连接。
      

  5.   

    这段代码会告诉你:  Dim strCnn As String
      Dim rs As ADODB.Recordset
      Dim cnn1 As ADODB.Connection
      Set cnn1 = New ADODB.Connection
      Set rs = New ADODB.Recordset  cnn1.ConnectionString = "driver={SQL Server};server=?;uid=sa;pwd=?"
      cnn1.Open strCnn  cnn1.DefaultDatabase = "mydb"
      rs.Open "select * from dpt", cnn1
      rs.Close  //  一定要关闭所有与mydb连接打开的游标  cnn1.DefaultDatabase = "master" // 改变默认数据库
       
      cnn1.Execute "sp_detach_db mydb" //分离数据库  cnn1.Close
       
       另:如果你用了数据环境,请关闭它打开的连接 (DataEnvironment1.Connection1.close)
      

  6.   

        谢谢陆天兄,果然是高手。
        我昨天下午已经试验了一下,结果是发现:
        虽然我的程序已经关闭了ADO连接,但是我在企业管理器里发现,SQL SERVER 2000并没有释放连接,而是足足等了35秒才更新,连接才被释放。
        我是后来在程序中用DO WHILE 循环,监测当前的系统时间的变化,写入一个字符串变量后显示在状态栏上才得到35秒这个信息的。
        老天,是不是太久了。
        同时发现,原来我原来的程序没有错,只是没有给她等待的时间,用这个“她”是因为程序就象女人一样,剥去外壳,就任你摆布了。;-)
        拜托,再帮一个忙。
        在企业管理器里选择分离时,系统提示有一个连接,同时可以立刻关闭连接,这个过程在SQL SERVER 2000 中如何实现,我查阅了2000的帮助手册,可是不知道哪一个才是。
        一定加分的,并且希望留一个联系方式,我的Email:[email protected],希望以后可以经常互相探讨,我的专家分也增加的挺快的。就是 @^@ 不雅。
     
      

  7.   

        不好意思,说的不清楚,补充一下,我想问的是,即时分离既然SQL SERVER可以实现,一定有所对应的存储过程,我知道用SQL DMO可以实现这一点,但是我真的不想深入研究DMO,满屏E文,我看得快晕了。
        也谢谢其他参与的朋友,一并有分,不要嫌少哦。
      

  8.   

    我测试了一下,没有你所说的“等待35秒"的问题。(SqlServer的设置问题?)
    用DMO实现也很简单先加入SQLDMO引用,然后Dim MYSqlServer As New SQLDMO.SQLServerSet MYSqlServer = CreateObject("SQLDMO.sqlserver")MYSqlServer.Connect "服务器名", "sa", "口令"MYSqlServer.DetachDB "mydb"set MYSqlServer=Nothing
      

  9.   

    非常谢谢LUJUN兄,不知你所说的测试了一下是编了个和我相似的程序呢,还是......
    我是指程序中关闭连接字符串以后,服务器等了35秒才真正关闭了使用的数据库。
    总之,先加分了,大家收好。