你们肯定奇怪我为什么不用open返回一结果集吧..
问题是这样的:我在存储过程中:
先得到一个值,若些值为1直接返回.
若该值为0,则建立临时表等操做,并返回些临时表的数据..所以不能用open,因为可以没有结果集返回.我想用execproc................................可是它是不是不返结果集...?听明白我的意思了吗??????

解决方案 »

  1.   

    你用open而不是用execsql不就行了.
      

  2.   

    建议使用OPEN, 不过存储过程要改写
    1:先得到一个值,若些值为1直接返回.
        select @Value  
        return
    2: 若该值为0,则建立临时表等操做,并返回些临时表的数据..
        select * from #Temtable...前台可通过判断 TDataSet.Field.Count个数以决定是返回条件一还二的结果
      1> Str := Fields[0].Asstring;
      2> 则对数据集对行操作
      

  3.   

    1 也可以用open啊,一样执行存储过程,如果没有返回数据集的话,你判断一下empty或者fields[0].isnull就行了,并不会报错阿
    2 你可以用全局临时表,这样你的存储过程执行以后,你在客户端可以根据返回值然后到临时表select,不过这是两次交互动作,没有1好
      

  4.   

    adospTemp.Prepared := true;
        adospTemp.ExecProc;
        //表是否为空 1表示空,0表示不空
        iTableEmpty := adospTemp.Parameters.ParamByName('@TableEmpty').Value;
        if iTableEmpty=1 then
        begin
           Result := false;
           exit;
        end;
       //adospTemp.Open;        /
       // adospTemp.First;      //这下要检测是否有记录.....用什么语句?    while (not adospTemp.Eof) do
        begin
          //将数据写INI文件
          WriteJpgParamsToInif(strCurrentModel,adospTemp.FieldByName('Station').Value
                      ,adospTemp.FieldByName('JpgID').Value);
          adospTemp.Next;
        end;
    ===============================不对吧..当没有返回结果集的时候,也就是说存储过程中根据没有执行select语句时
    如果用open肯定会出现异常..."没有结果集返回"
      

  5.   

    to   Bes96261(秋水孤鶩) :前台可通过判断 TDataSet.Field.Count个数以决定是返回条件一还二的结果
      1> Str := Fields[0].Asstring;
      2> 则对数据集对行操作
    ============================
      2> 则对数据集对行操作????这怎么写..?我这是时如何得到结果集?
      

  6.   

    大家都很忙了吧...
    以下面这个简单的存储过程为例....:
    -----------------
    CREATE PROCEDURE  TEST
    (
     @value char(1)
    )
    AS declare @A CHAR(1)
      ...........
     IF @A ='1'  
     beign
       select  @value ='1'
       return
     end;  select * from t
    GO
    ==================
    前端如何得到?