数据库'备份/恢复'碰到的有关问题,敬请高手指教,先谢啦

数据库'备份/恢复'碰到的问题,敬请高手指教,先谢啦!
我在同一架机里写了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'中的冒号解析为参数