请教一个关于数据库恢复的问题。

zjh527 2006-01-16 09:23:01
下面是我恢复数据库的代码,由于实际需要我将好几个数据库的备份文件放在了某个文件夹里,然后在一个循环中做恢复和删除这些份数据库。
现在有个问题就是恢复前2个还可以,后面就开始报错了:超时已过期。及便是恢复一个数据库有时也出现这种错误。是不是Delphi的ADO控件本身就存在这种问题呀。大家有什么解决办法吗?我用的是Delphi7。

procedure TFmain.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to selfChildrenXzqh.count-1 do
begin
RestoreDatabase(参数1,参数2) ;
....
DeleteDatabase(数据库名称);
end;
end;

procedure TFmain.RestoreDatabase(dbfile,filename:string);
var
query:TADOQuery;
sql:String;
begin
query.Close;
query.SQL.Text:='restore filelistonly FROM DISK = '''+dbFile+'.bak'+'''';
query.Open;

sql:=' if exists(select 1 from sysdatabases where name =''c'+filename+''')'+#13+
' begin'+#13+
' drop database c'+filename+#13+
' end';
DMd.ADOC.Execute(sql);

sql:=' RESTORE DATABASE c'+filename+#13+
' FROM DISK = '''+dbFile+'.bak'+''' ' +#13+
' WITH replace ,'+#13;
while not query.Eof do
begin
sql:=sql+' move '''+query.FieldByName('LogicalName').AsString+''' to '''+selfWaisDir+ParentDir+
query.fieldbyname('LOGICALNAME').AsString+ExtractFileExt(query.FieldByName('physicalName').AsString)+'''';
query.Next;

if not query.Eof then
sql:=sql+',';
end;
try
DMd.ADOC.Execute(sql);
if FileExists(dbFile+'.bak') then
DeleteFile(dbFile+'.bak');
except
on E:exception do
begin
Memo1.lines.add(sql);
Memo1.lines.add(E.message);
end;
end;
query.free;
end;
...全文
42 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,497

社区成员

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

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