数据库'备份/恢复'碰到的有关问题,敬请高手指教,先谢啦
数据库'备份/恢复'碰到的问题,敬请高手指教,先谢啦!
我在同一架机里写了2个程序,分别连接2个不同的数据库(同一个SQL里的2个数据库)
这是我第一个程序备份数据库的语句:
with Frm_DB.ADOQ,SQL do
begin
//制作操作日志
close;
Clear;
Add('use Master');
ExecSQL;
Clear;
Add('execute sp_helpdevice');
ExecSQL;
Clear;
Add('backup database SP_school to disk=:disk with init');
Parameters.ParamByName('disk').Value:='c:\SP_sch.dat';
ExecSQL;
Clear;
Add('use SP_school');
ExecSQL;
end;
第一个程序还原数据库的语句:
with ADOQbak,SQL do
begin
close;
clear;
Add('use master alter database SP_school set offline WITH ROLLBACK IMMEDIATE');
Add('restore database SP_school from disk=:disk with REPLACE');
Add('alter database SP_school set online with rollback immediate');
parameters.ParamByName('disk').Value :='c:\SP_sch.dat';
execsql;
end;
第一个程序运行正常.
我的第二个程序也采用上面的语句,只是数据库名改了,'SP_school'改为'sorrow_pig',备份路径也改成'D:\sorrow_pig.dat',
备份正常,但是恢复老是出错:project sorrow_pig.exe raised exception class EDatabaseErrow with message'ADOQbak:Parameter 'disk' not found '
请大侠们指点.叩谢!!!
------解决方案--------------------
Add( 'restore database SP_school from disk= ' + QuotedStr( 'c:\SP_sch.dat ') + ' with REPLACE ');
有了这一句后,就不需要用
parameters.ParamByName( 'disk ').Value := 'c:\SP_sch.dat ';
这一行了。
ADO带参数经常有奇怪的问题,如果手工拼字符串就没有问题了。
------解决方案--------------------
ADOQbak.ParamCheck := False;
//默认是true, 会将'c:\SP_sch.dat'中的冒号解析为参数
我在同一架机里写了2个程序,分别连接2个不同的数据库(同一个SQL里的2个数据库)
这是我第一个程序备份数据库的语句:
with Frm_DB.ADOQ,SQL do
begin
//制作操作日志
close;
Clear;
Add('use Master');
ExecSQL;
Clear;
Add('execute sp_helpdevice');
ExecSQL;
Clear;
Add('backup database SP_school to disk=:disk with init');
Parameters.ParamByName('disk').Value:='c:\SP_sch.dat';
ExecSQL;
Clear;
Add('use SP_school');
ExecSQL;
end;
第一个程序还原数据库的语句:
with ADOQbak,SQL do
begin
close;
clear;
Add('use master alter database SP_school set offline WITH ROLLBACK IMMEDIATE');
Add('restore database SP_school from disk=:disk with REPLACE');
Add('alter database SP_school set online with rollback immediate');
parameters.ParamByName('disk').Value :='c:\SP_sch.dat';
execsql;
end;
第一个程序运行正常.
我的第二个程序也采用上面的语句,只是数据库名改了,'SP_school'改为'sorrow_pig',备份路径也改成'D:\sorrow_pig.dat',
备份正常,但是恢复老是出错:project sorrow_pig.exe raised exception class EDatabaseErrow with message'ADOQbak:Parameter 'disk' not found '
请大侠们指点.叩谢!!!
------解决方案--------------------
Add( 'restore database SP_school from disk= ' + QuotedStr( 'c:\SP_sch.dat ') + ' with REPLACE ');
有了这一句后,就不需要用
parameters.ParamByName( 'disk ').Value := 'c:\SP_sch.dat ';
这一行了。
ADO带参数经常有奇怪的问题,如果手工拼字符串就没有问题了。
------解决方案--------------------
ADOQbak.ParamCheck := False;
//默认是true, 会将'c:\SP_sch.dat'中的冒号解析为参数