源程序 try
              DataStr:=Edit3.text+'_Data.MDF';
              LogStr:=Edit3.text+'_Log.LDF';
              Copyfile(PChar('E:\php\SK_Data.MDF'),PChar(Edit3.text+'_Data.MDF'),false) ;
              Copyfile(PChar('E:\php\SK_Log.LDF'),PChar(Edit3.text+'_Log.LDF'),false) ;
                with ADOQuery1 do
                  begin
                  SQL.Clear   ;
                  SQL.add('sp_attach_db   @dbname=N'+''+':yourdbname'+''+'   ,   ');
                  SQL.add('@filename1=N'+':data'+'   ,   ');
                  SQL.add('@filename2=N'+':log');
                  Parameters.ParamByName('yourdbname').Value :=''''+Trim(Edit1.Text )+'''';
                  Parameters.ParamByName('data').Value :=''''+DataStr+'''';
                  Parameters.ParamByName('log').Value :=''''+LogStr+'''';
                end;
                  ADOQuery1.ExecSQL   ;
                  ShowMessage('成功')  ;
              except
                ShowMessage('失败');
                Self.Close ;
              end;
MSSQL事件器捕抓到:
exec sp_executesql N'sp_attach_db   @dbname=N@P1   ,   
@filename1=N@P2   ,   
@filename2=N@P3
', N'@P1 varchar(5),@P2 varchar(28),@P3 varchar(27)', '''hao''', '''D:\skerp\data\hao_Data.MDF''', '''D:\skerp\data\hao_Log.LDF'''
提示语法错误,直接用这个    ADOQuery1.SQL.Clear   ;   
  ADOQuery1.SQL.add('sp_attach_db   @dbname=N'+''+'''yourdbname'''+''+'   ,   ');   
  ADOQuery1.SQL.add('@filename1=N'+''''+'D:\skerp\data\hao_Data.MDF'+''''+'   ,   ');   
  ADOQuery1.sql.add('@filename2=N'+''''+D:\skerp\data\hao_Log.LDF''') ;
  ADOQuery1.ExecSQL   ;
是正确。
谢谢!

解决方案 »

  1.   

    如果后半部分正确,那应该是前面copy过程,出错了吧,比如说目标文件已经有了,所以copy不过去,你可以用断点调试一下,看看究竟是哪里出问题。
      

  2.   

    错在ADOQuery1.ExecSQL;MSSQL事件器捕抓到如下:
    exec sp_executesql N 'sp_attach_db   @dbname=N@P1   ,    
    @filename1=N@P2   ,    
    @filename2=N@P3 
    ', N '@P1 varchar(5),@P2 varchar(28),@P3 varchar(27) ',  ' ' 'hao ' ' ',  ' ' 'D:\skerp\data\hao_Data.MDF ' ' ',  ' ' 'D:\skerp\data\hao_Log.LDF ' ' ' 用SQL查询分析运行上面会提示语法错误,不知道怎么调试这个SQL语句