dm.ADOCon.Connected:=false;
sqls:='use master restore database exam from disk='''+ss+''' with REPLACE ';
dm.DBSetQ.ConnectionString:=MainFrm.cons;
dm.DBSetQ.Close;
dm.DBSetQ.SQL.Clear;
dm.DBSetQ.SQL.Add(sqls);
dm.DBSetQ.ExecSQL;
语句能够执行,但执行的结果是数据库没任何改变。
在sql server的事件跟踪器中显示Reads,Writes项均比手工还原的数值小!
不知是何原因,请教各位有没遇到类似情形!
sqls:='use master restore database exam from disk='''+ss+''' with REPLACE ';
dm.DBSetQ.ConnectionString:=MainFrm.cons;
dm.DBSetQ.Close;
dm.DBSetQ.SQL.Clear;
dm.DBSetQ.SQL.Add(sqls);
dm.DBSetQ.ExecSQL;
语句能够执行,但执行的结果是数据库没任何改变。
在sql server的事件跟踪器中显示Reads,Writes项均比手工还原的数值小!
不知是何原因,请教各位有没遇到类似情形!
解决方案 »
- cxTreeList如何获得check状态实现联动?
- 最近下了个 pas 可以作成dpk包得 如何更改dpk安装到组件面板上的名称呢 ?该控件会注册再新组件面板页
- 已在程序中设置Database对象Params和LoginPrompt属性,为何还要弹出登录对话框???(delphi6英文版与SQL7连接,操作系统为win2000)
- 关于.web app debugger 的一个问题
- 怎样定义TStrings类型的变量
- 谁有cxdbtreeview或者CXtreeview的使用说明或者DEMO吗?
- DBGrid 当前行的 Color 控制背景色(兄弟们有点子吗)
- Mscomm串口控件使用Input方法报错,用其他方法就行,如Inbuffercount
- Delphi6里,怎样做中文打印,就是自己设置打印按钮什么的。
- 关于local sql的语法
- DELPHI如何操作EXCEL對象的單元格類型(高分求解)
- 登录窗口与主窗口的问题
当我恢复时出错:
with query1 do
begin
close;
sql.Clear;
sql.Add(format('RESTORE DATABASE tushu FROM DISK=''%s''',[gn]));
execsql;错误提示为:
因为数据库正在使用,未能获得数据库的排它访问权
请问该怎么做???
在查询分析器中运行
use master
goif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_killspid]
GOcreate proc p_killspid
@dbname sysname--要关闭进程的数据库名
as
declare @s nvarchar(1000)
declare tb cursor local for
select s='kill '+cast(spid as varchar)
from master..sysprocesses
where dbid=db_id(@dbname)open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb
goprocedure TForm3.Button2Click(Sender: TObject);
begin
if opendialog1.Execute then
begin
adoquery1.SQL.Text:='use master;exec p_killspid mydatabase;Restore database madatabase From disk='''+opendialog1.FileName+''';Use mydatabase';
adoquery1.ExecSQL;
application.MessageBox('数据库完成恢复','提示',MB_OK);
end;
end;
我也是这么写的
(还原过程中不能有任何程序访问数据库)
还原后强制退出软件,再登陆
如果没有其他程序访问数据库的话,一般能还原成功
*/
ExecuteSql('use master');
ExecuteSql(Format('RESTORE DATABASE %s FROM DISK =''%s'' with replace',[g_sDefaultdb,FileName])); fmMain.bsSkinMessage1.MessageDlg('数据库恢复已完成,请重新启动程序!',mtInformation,[mbOK],0);
Application.Terminate;
Abort;
var
Str: string;
begin
DataModule2.ADOConnection1.Connected := false;
ADOConn.Connected := False;
ADOConn.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=master;Data Source=SAILOR';
ADOConn.Open;
if edit1.Text <> '' then
begin
Str := 'restore database test from disk = '+ #39 + edit1.Text + #39 + ' with replace, '
+ 'move ' + #39 + 'test_data' + #39 + ' to ' + #39 + 'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Data.MDF' + #39
+ ',move ' + #39 + 'test_log' + #39 + ' to ' + #39 + 'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log.LDF' + #39;
with Adoquery1 do
begin
close;
sql.Clear;
sql.Add('ALTER DATABASE test SET OFFLINE WITH ROLLBACK IMMEDIATE');
try
ExecSQL;
except end;
close;
sql.Clear;
sql.Text := Str;
try
execsql;
application.MessageBox('成功','asdf',mb_ok+ mb_iconinformation);
except
application.MessageBox('错误','asdf',mb_ok+ mb_iconstop);
end;
close;
sql.Clear;
sql.Add('ALTER DATABASE test SET ONLINE WITH ROLLBACK IMMEDIATE');
try
ExecSQL;
except end;
end;
end;
ADOConn.Connected := false;
DataModule2.ADOConnection1.Connected := True;
end;
@dbname sysname--要关闭进程的数据库名
as
declare @s nvarchar(1000)
declare tb cursor local for
select s='kill '+cast(spid as varchar)
from master..sysprocesses
where dbid=db_id(@dbname)open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb
go以上这个最重要,没有这个不可以换原的
procedure TForm23.Button2Click(Sender: TObject);
begin
if opendialog1.Execute then
begin
adoquery1.SQL.Text:='use master;exec p_killspid mydatabase;Restore database madatabase From disk='''+opendialog1.FileName+''';Use mydatabase';
adoquery1.ExecSQL;
application.MessageBox('数据库完成恢复','警告',MB_OK);
end;
end;
我就是这么恢复的,绝对可行,不行的话大概是你哪个环节没处理好