backstr:='RESTORE DATABASE reg FROM  DISK ='''+extractfilepath(application.Exename)+'reg.dat'+''''+' WITH  FILE = 1,  NOUNLOAD ,  STATS = 10,  RECOVERY , '+
'MOVE N'+''''+'reg_Data'+''''+' TO N'+''''+'D:\reg_Data.mdf'+''''+',  MOVE N'+''''+'reg_Log'+''''+' TO N'+''''+'D:\reg_log.ldf'+'''';我想将上面还原的目录(d:\)用如下来@path替换
declare  @path  varchar(200)  
select  @path  =  filename  from  master.dbo.sysfiles  
set  @path  =  ltrim(REVERSE(@path))  
---------------------------------------------------------------------
set  @path  =  REVERSE(substring(@path,CHARINDEX('\',@path),len(@path)))  
------------------------------------------------------------------------
这条SQL语如何写。。我写就是出错。。单引号打得不对。。
adoquery1.sql.add( 一 )
adoquery1.sql.add(backstr)
注意:----------内的\线如何写。。放到一中 ,backstr 中的目录用@path 换下,如何写,谢谢!!

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var s:string;
    begin
      s:='tdfdfd''dfdfdf';
    end;
      

  2.   

    你也可以尝试用"来代替'如:backstr:='RESTORE DATABASE reg FROM  DISK ="'+extractfilepath(application.Exename)+'reg.dat'+'"'
      

  3.   

    如果上面的还没有让你明白,以后在字符传中想出现'就用#39代替把
    如:
    S:='fhkjds'+#39+'fsdf'+#39;
      

  4.   

    delphi里面字符串用单引号表示,如果碰到 sql语句中字段为字符串型,因为此时要要在字符 串里面包含字符串也就是单引号里面包含单引号,实现的办法是把里面的字符串用双引号表示。
      

  5.   

    有一个简单原则,就是先用"来代替串中的',然后再用两个''来代替
    Select * From mytable where name='John'=>
    'Select * From myTable Where Name="John"'=>
    'Select * From myTable Where Name=''John'''
      

  6.   

    with adoquery1 do
    begin
    sql.add('select * from table where field=:field');
    Parameters.ParamByName('field').value :=@path;
    end
      

  7.   

    我告诉你单引号这样写绝对不会出错,chr(39),给分吧