下面是一段恢复数据库的程序,老是提示数据库正在使用中,可我已经将连接断开了~~~不懂程序哪里有问题,各位帮帮忙~~~~
procedure TE_databaseF.Button3Click(Sender: TObject);
var conn: tadoconnection;
  ado: tadocommand;
  a: integer;
begin
  if Application.MessageBox('数据库恢复功能只能在服务器上执行,请先确认计算机是要恢复的服务器,并且现在没有任何程序正在使用数据库,是否现在进行恢复?', '提示', mb_yesno + mb_iconquestion) = idno then
    abort
  else
  begin
    if RzOpenDialog1.Execute then
    begin
      E_jdF := tE_jdf.create(self);
      E_jdF.Label1.Caption := '正在还原数据,这可能需要几分钟时间!';
      E_jdF.Caption := '数据库还原';
      conn := tadoconnection.Create(nil);
      conn.LoginPrompt := false;
      conn.Connected := false;
      conn.ConnectionString := 'Provider=SQLOLEDB.1;User ID=' + datamodule1.user + ';Password=;Data Source=' + Datamodule1.server + '';
      datamodule1.ADOConnection1.Connected := false;  //断开原有连接
      conn.Connected := true;
      ado := tadocommand.Create(nil);
      ado.Connection := conn;
      ado.CommandTimeout := 300;
      Application.ProcessMessages;
      ado.CommandText := 'Restore database Wlzls from disk=''' + RzOpenDialog1.FileName + '''';
      try
        ado.Execute;
      except
        Application.MessageBox('数据还原失败,请确认没有其它程序已经连接到数据库!', '提示', MB_OK + MB_ICONSTOP);
        E_jdF.Close;
        Exit;
      end;
      ado.Free;
      Application.MessageBox('数据还原成功!', '提示', MB_OK);
    end;
    E_JdF.Close;
  end;
end;

解决方案 »

  1.   

    procedure Tmainform.ToolButtonrestoreClick(Sender: TObject); //还原数据库
    begin
      try
        if (Opendialog1.Execute) and (OPenDialog1.FileName <> '') then
        begin
          if Application.MessageBox('是否还原数据库?原有数据将被覆盖!', '提示', mb_yesno) = ID_yes then
          begin
            with dm1.adoquery1 do
            begin
              CLose;
              SQL.Clear;
              SQL.Add('use master restore database 数据库名 from disk=''' + OpenDialog1.FileName + '''');
              ExecSQL;
            end;
            Application.MessageBox('还原成功!', '提示', 0);
          end;
        end;
      except
        Application.MessageBox('还原失败!', '提示', 0);
      end;
      with dm1.adoquery1 do
      begin
        CLose;
        SQL.Clear;
        SQL.Add('use 数据库名');
        ExecSQL;
      end;end;
    参考一下
      

  2.   

    我想问下一楼的,就是,你那个adoquery1 的connection是连接到哪里的?程序中的adoconncetion有没有断开呢?
      

  3.   

    换字符串不行的lxbsweet
    正解
      

  4.   

    那adoquery1 这个是连接到哪里的啊?
      

  5.   

    晕,问题解决~原来是还原语句有问题~~嘿嘿~
    ado.CommandText := 'Restore database Wlzls from disk=''' + RzOpenDialog1.FileName + '''';//use master Restore database Wlzls from disk................................