procedure TForm1.Button1Click(Sender: TObject);
begin
opendialog1.Title:='数据恢复';
opendialog1.Filter:='Bak files(*.bak)|*.bak|All files (*.*)|*.*';
opendialog1.DefaultExt:='bak';
if opendialog1.Execute then
begin
adocommand1.CommandText:='Alter Database tgwxgl Set Offline with Rollback immediate'+#13;
adocommand1.commandtext:=adocommand1.commandtext+'Restore Database tgwxgl From disk:='''+opendialog1.FileName+''''+#13;
adocommand1.commandtext:=adocommand1.commandtext+'Alter Database tgwxgl Set OnLine With rollback Immediate';
  try
  adocommand1.Execute;
  application.MessageBox('数据恢复成功!','提示',MB_OK);
  except
     application.MessageBox('数据恢复失败,请重新运行程序,再次进行恢复!','提示',MB_OK);
  END;
end;
上面的语句老出现:

解决方案 »

  1.   

    在每条sql命令后加一行'go'试试,或直接execute三次
      

  2.   

    每条语句都分开执行adocommand1.CommandText:='Alter Database tgwxgl Set Offline with Rollback immediate';
    adocommand1.execute;
      

  3.   

    with  ADOQuery1 do
    begin
      close;
      sql.clear;
      SQL.Add('RESTORE FILELISTONLY ');
      SQL.add('FROM DISK = '''+trim(edit1.Text)+'''');
      SQL.add('RESTORE DATABASE databasename ');
      SQL.add('FROM DISK = '''+trim(edit1.Text)+'''');
      SQL.add('WITH MOVE ''databasename'' TO ''c:\Program Files\databasename.mdf'', ');
      SQL.add('MOVE ''databasename_log'' TO ''c:\Program Files\databasename.ldf''');
      ExecSQL;  
    end;