数据库还原,高分求救!

guge 2005-05-18 10:02:14
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项均比手工还原的数值小!
不知是何原因,请教各位有没遇到类似情形!
...全文
202 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
guge 2005-05-22
  • 打赏
  • 举报
回复
谢谢以上各位的热心回复,关键我的程序是能执行,并没报错,只是执行完了的结果是数据库并没有任何改变.不知是何原因!
advancejar 2005-05-20
  • 打赏
  • 举报
回复
在master里创建存储过程

create 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
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;


我就是这么恢复的,绝对可行,不行的话大概是你哪个环节没处理好
fhuibo 2005-05-20
  • 打赏
  • 举报
回复
procedure TForm3.Button1Click(Sender: TObject);
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;
naner_china 2005-05-20
  • 打赏
  • 举报
回复
/*
我也是这么写的
(还原过程中不能有任何程序访问数据库)
还原后强制退出软件,再登陆
如果没有其他程序访问数据库的话,一般能还原成功
*/
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;
wlbfeihu 2005-05-20
  • 打赏
  • 举报
回复
转贴:
当我恢复时出错:
with query1 do
begin
close;
sql.Clear;
sql.Add(format('RESTORE DATABASE tushu FROM DISK=''%s''',[gn]));
execsql;

错误提示为:
因为数据库正在使用,未能获得数据库的排它访问权
请问该怎么做???
在查询分析器中运行
use master
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_killspid]
GO

create 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
go

procedure 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;
guge 2005-05-20
  • 打赏
  • 举报
回复
都几天了
怎么连个进来看一下的都没有啊!
guge 2005-05-18
  • 打赏
  • 举报
回复
其中的SS是还原的文件名!
内容概要:本文档系统整合了基于MATLAB/Simulink的风力涡轮机雷达信号仿真、电力系统优化、新能源调控及多领域智能算法应用资源,涵盖风电功率平抑、混合储能协同调频、综合能源系统调度、无人机三维路径规划、电动汽车参与调度、电氢氨耦合系统优化等前沿科研方向。资源包提供大量可复现的Matlab代码、Simulink仿真模型、数据集及配套论文,涉及GWO、PSO、WOA、HHO等多种智能优化算法,以及LSTM、CNN、GRU等深度学习模型在负荷预测、故障诊断、信号处理中的应用,尤其聚焦于风电与雷达信号交互、储能功率分配、虚拟电厂运行、微电网多时间尺度优化等关键技术的仿真实现。; 适合人群:具备一定MATLAB编程基础,从事电力系统、新能源、智能优化、信号处理、雷达仿真、综合能源管理等相关领域的科研人员及研究生;工作1-3年相关方向的工程师。; 使用场景及目标:①开展风力发电系统与雷达信号交互仿真研究;②复现高水平期刊论文中的优化调度、故障诊断、功率预测模型;③进行无人机路径规划、储能系统设计、综合能源系统优化等课题研究与论文撰写;④借助成熟的代码框架快速搭建仿真模型,提升科研效率与工程实践能力。; 阅读建议:建议按主题分类浏览资源列表,优先选择标注“复现”“顶刊”“EI”等高价值项目,结合提供的网盘链接下载完整代码与数据,配合Simulink仿真模型与说明文档进行调试与二次开发,注重算法实现与实际工程问题的深度融合。

2,508

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧