ADOQueryTmp := nil;
        ADOQueryTmp := TADOQuery.Create(ADOQueryTmp);
        ADOQueryTmp.Connection := Data1.ADOConnection1;
        begin                   
        s_sql:='EXEC PR_WLCRKSH '+CRKid+',1,'''+Frm_Main.User_Name+''','''+computername1+'''';
         ADOQueryTmp.SQL.Clear ;
         ADOQueryTmp.SQL.Add(s_sql) ;
         ADOQueryTmp.open;
MsgBoxinfo(trim(ADOQueryTmp.FieldByName('result').asstring));程序没有问题,如果调用存储过程返回result就会很正常,如果没有就会报错,我希望不返回时就不要报错,直么都不显示

解决方案 »

  1.   


    if not ADOQueryTmp.IsEmpty then
      MsgBoxinfo(trim(ADOQueryTmp.FieldByName('result').asstring));
      

  2.   

    改存储过程会好点即没有记录返回时,则执行一个SQL语句,比如 select 'no result'
      

  3.   


    不行,open了就不行还用返回commandtext does not return a result set
      

  4.   


    启发,可以了
    select '' as  result'
    if ADOQueryTmp.FieldByName('result').asstring<>'' then
    MsgBoxinfo(trim(ADOQueryTmp.FieldByName('result').asstring));
      

  5.   

    如果你是执行一个存储过程的话,改成:
    ADOQueryTmp.ExecSQL;
    MsgBoxinfo(trim(ADOQueryTmp.FieldByName('result').asstring));
    这样就可以捕捉到commandtext does not return a result set信息
    如果你是执行一个select语句的话,不用修改任何语句就可以捕捉到commandtext does not return a result set信息。
    了解深入点,open和execsql的区别在于:
    open返回结果集。   
      excsql不返回结果集。   
      在执行insert、update、delete等操作的时候,因为你并不需要返回结果集,就可以用excsql了。象标准的select   语句就得用   open   了:)     
      

  6.   


    这个当然知道了,费话
    我是要执行存储过程,但是执行存储里有些异常信息要返回给客户看,但是这个存储过程照样执行下去,不影响,只是提醒if @djbh='' or @djbh=null
        begin  
          raiserror('单据编号不能为空。',16,1)
            return
        end
    这个强制退出
    if @bz='' 
    select '退货的话备注最好填一下' as result
    这个只是提醒客户