用ADOQuery1.ExecSQL; 执行了一个sql语句(含insert操作)。执行后出现下面的异常:
project Project1.exe raised exception class EDatabaseError with message 'ADOQuery1: CommandText does not return a result set'. process stopped. 
但是查看表的内容发现插入已经成功了,而且在sql server环境下执行此语句也是正确的,请问这是怎么回事呢?

解决方案 »

  1.   

    'select ....'请用ADOQuery1.Open
    '非select ...'请用ADOQuery1.ExecSQL
      

  2.   

    代码如下: 
     ADOQuery1.Active := false;
      ADOQuery1.Connection := ADOConnection1;
      ADOQuery1.SQL.Clear;
      str := 'insert into achieve (SFZH,cError,cTotal,wError,wTotal,eError,eTotal,DETAILS,TOTAL,achieve) select T1.SFZH,T1.cError,T1.cTotal,T2.wError,T2.wtotal,T3.eError,T3.eTotal,T4.DETAILS,T4.TOTAL,T1.cTotal+T2.wTotal+T3.eTotal+T4.Total'
             +  ' from Choice_Scores T1, Word_Scores T2, Excel_Scores T3,Access_Scores T4 where T1.SFZH=T2.SFZH and T2.SFZH=T3.SFZH and T3.SFZH=T4.SFZH' ;
      ADOQuery1.SQL.Add(str);
      ADOQuery1.Active := true;
      ADOQuery1.ExecSQL;
      

  3.   

    select语句才可以用Open
    没有select语句,不要用ExecSQL
      

  4.   

    ADOQuery1.Active := true;这句去掉,Active就是open
      

  5.   

    还是不行,我没有用open , 用的就是active :=true, 把它去掉换成open也不行。
      

  6.   

    你用了Select......最後就要用個,Open因為要有返回值呀。
      

  7.   

    ADOQuery1.Active := true;去掉
      

  8.   

    我知道了, ljmanage(过客)说的对, 我写了一个ADOQuery1.Active := true;  又写了ADOQuery1.ExecSQL;所以出现问题了,多谢各位的帮忙。