我想在程序中提供数据库备份和还原的功能,备份过程可以在连接数据库时进行,还原过程必须断开与数据库的连接,但用断开连接命令一定要等待近一分钟时间才能真正断开与数据库的连接,在这过程中进行还原操作就会报错,我试过在还原操作前加一段代码,让程序等待一分钟继续进行,但提示执行过程超时。下面是我的部分源代码,请指点: //释放所有窗体
if form2<>nil then
begin
form2.Free;
form2:=nil;
end;
if form3<>nil then
begin
form3.Free;
form3:=nil;
end;
... ... //释放连接 ADOConnection1连接需要还原的数据库
form1.ADOConnection1.Close;
form1.ADOConnection1.Free;
form1.ADOConnection1:=nil; form1.ADOConnection2.BeginTrans;
try
str='restore database from disk='''+edit1.text+''' with replace';
form1.ADOConnection2.Execute(str); //报错
form1.ADOConnection2.CommitTrans;
showmessage('数据库还原成功!');
except
form1.ADOConnection2.RollbackTrans;
showmessage('还原失败');
end;
if form2<>nil then
begin
form2.Free;
form2:=nil;
end;
if form3<>nil then
begin
form3.Free;
form3:=nil;
end;
... ... //释放连接 ADOConnection1连接需要还原的数据库
form1.ADOConnection1.Close;
form1.ADOConnection1.Free;
form1.ADOConnection1:=nil; form1.ADOConnection2.BeginTrans;
try
str='restore database from disk='''+edit1.text+''' with replace';
form1.ADOConnection2.Execute(str); //报错
form1.ADOConnection2.CommitTrans;
showmessage('数据库还原成功!');
except
form1.ADOConnection2.RollbackTrans;
showmessage('还原失败');
end;
解决方案 »
- 如何实现单击comobox就会下拉
- access导入到sqlserver,出现问题,帮忙解决一下吧!
- DevCo has got the Delphi Product Manager -- Nick Hodges
- 请问getmem是用什么API函数简化的?
- 怎么用BDE连接Foxpro数据库,请说明详细配置过程,我搞了N次就是不爽,谢谢!!
- 给所有组件设置某个属性的值
- delphi关闭一个正在运行程序含有关键词--在线等
- 如何制作用鼠标拖动子窗体的效果
- 一个莫名其妙的硬件问题
- 請教各位﹕如何刪除某個目錄下的所有文件﹖
- 输入法的问题:form1调用form2,当form2关闭的时候如何不关闭form1的输入法,如同调用前的一样。
- PostMessage
unit dbopr;interfaceuses windows, forms;type
TDBBack = function(dbname, username, passwd, dirc, timestamp: pchar): Integer; stdcall;
TDBRest = function(dbname, username, passwd, dirc: pchar): Integer; stdcall;function backdb(dbname, username, passwd, dirc, timestamp: pchar): integer;
function restdb(dbname, username, passwd, dirc: pchar): integer;implementation
function backdb(dbname, username, passwd, dirc, timestamp: pchar): integer;
var
DBBack: TDBBack;
VL_HDL: integer;
begin
Result := -1;
VL_Hdl := LoadLibrary('database.dll');
if VL_Hdl >= 32 then
begin
@DBBack := GetProcAddress(VL_Hdl, 'backdb');
if (@DBBack = nil) then
begin
Application.MessageBox('函数调用失败!某些管理将无法进行。请与系统管理员联系!', '提示信息', mb_OK or mb_ICONEXCLAMATION);
end
else
begin
Result := DBBack(dbname, username, passwd, dirc, timestamp);
end;
end;
end;function restdb(dbname, username, passwd, dirc: pchar): integer;
var
DBRest: TDBRest;
VL_HDL: integer;
begin
Result := -1;
VL_Hdl := LoadLibrary('database.dll');
if VL_Hdl >= 32 then
begin
@DBRest := GetProcAddress(VL_Hdl, 'restdb');
if (@DBRest = nil) then
begin
Application.MessageBox('函数调用失败!某些管理将无法进行。请与系统管理员联系!', '提示信息', mb_OK or mb_ICONEXCLAMATION);
end
else
begin
Result := DBRest(dbname, username, passwd, dirc);
end;
end;
end;end.
关于这个问题在MS的sql server2000管理员手册中有比较完整的说明。