我在同一架机里写了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 '
请大侠们指点.叩谢!!!
      

解决方案 »

  1.   

    你SQL的查询分析器里面运行一下你的sql语句试一下
      

  2.   

    找不到disk 
    show一下sql.text看看
      

  3.   

    我怀疑可能是'disk'已经被第一个程序占用,试过改用其他名称,都不行
    请高手指教
      

  4.   

    //Add( 'restore database SP_school from disk=:disk with REPLACE '); 不要用参数的方法。
    修改为:Add( 'restore database SP_school from disk=' + QuotedStr( 'c:\SP_sch.dat ') + ' with REPLACE '); 看看行不行。
      

  5.   

    发表于:2007-09-05 09:08:364楼 得分:0 
    //Add(  'restore database SP_school from disk=:disk with REPLACE  '); 不要用参数的方法。 
    修改为: Add(  'restore database SP_school from disk= ' + QuotedStr(  'c:\SP_sch.dat  ') +  ' with REPLACE  ');  看看行不行。 
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    嘿嘿,还是不行啊
      

  6.   

    现在是什么错?
    应该不会是Parameter  'disk ' not found  这个错误。是不是SQL语句错误?
      

  7.   

     Add( 'restore database SP_school from disk=:disk with REPLACE '); //这句有问题吧
      

  8.   

    发表于:2007-09-05 15:09:416楼 得分:0 
    现在是什么错? 
    应该不会是Parameter   'disk  ' not found  这个错误。是不是SQL语句错误? 
    ///////////////////////////////////////////////////////////////////
    还是这个提示
    然后焦点跳到这一行:parameters.ParamByName( 'disk ').Value := 'c:\SP_sch.dat '; 
      

  9.   

    发表于:2007-09-05 16:38:597楼 得分:0 
     Add(  'restore database SP_school from disk=:disk with REPLACE  '); //这句有问题吧 
    ////////////////////////////
    但是我的第一个程序却能正常运行,应该是SQL里面'disk'的冲突问题
    小弟能力有限,请帮忙
      

  10.   

    Add(   'restore database SP_school from disk=  ' + QuotedStr(   'c:\SP_sch.dat   ') +   ' with REPLACE   ');   
    有了这一句后,就不需要用
    parameters.ParamByName(  'disk  ').Value :=  'c:\SP_sch.dat  ';  这一行了。
    ADO带参数经常有奇怪的问题,如果手工拼字符串就没有问题了。
      

  11.   

    Add(    'restore database SP_school from disk=   ' + QuotedStr(    'c:\SP_sch.dat    ') +    ' with REPLACE    ');    
    有了这一句后,就不需要用 
    parameters.ParamByName(   'disk   ').Value :=   'c:\SP_sch.dat   ';   这一行了。 
    ADO带参数经常有奇怪的问题,如果手工拼字符串就没有问题了。
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    这句我有试过去掉,错误提示:
    parameter object is improperly defined
      

  12.   

    ADOQbak.ParamCheck := False;
    //默认是true, 会将'c:\SP_sch.dat'中的冒号解析为参数