用clientdataset 三层 执行 存储过程 open 后 如下错误
adoquery:commandtext does not return a result set参数都对 两层执行没问题 可以返回结果数据库 MSSQL 
存储过程
create procedure H_test
@vdate varchar(12),
@vflag int
as
begin
declare @tabname varchar(20)
set @tabname-'mydb'+datename(yy,getdate)+datename(mm,getdate())
declare @sqlstr varchar(1000)
set @sqlstr='selece * from '+@tabname+' where mdate='+''''+@vdate+''''+' and flag='+convert(varchar(5),@vflag)
exec (@sqlstr)
end两层执行没问题 可以返回结果
但是 三层 就不行 
不知如何解决 

解决方案 »

  1.   

    这个存储过程没有返回任何记录集
    你可以在后面加一句:
    select 1
      

  2.   

    加上 SELECT 1  岂不是 得不到查询结果了吗?
    这个存储过程 在两层下用adoQUERY可以查询到结果集
      

  3.   

    为什么要用open啊。。open是必须要返回结果集的啊,没返回结果集的用exec,感觉你这存储过程写的不对啊,没有设置返回的变量啊?
      

  4.   

    存储过程 没有错 返回的是查询的 记录集
    不用cds 只用adoquery 运行 可以返回查询的记录集
      

  5.   

    你可以在中间层写个方法,使用AdoQuery,执行之后返回查询数据集就可以了。 
    clientdata最好不要直接和数据库打交道。
      

  6.   

    例如:
      假设DataSetProvider连接的是AdoQuery;function GetData(var data: variant; var err:string): boolean;
    begin
      Result := true;
      err = '';
      try
        AdoQuery.SQL.clear;
        AdoQuery.Sql.add('exec H_test 参数1, 参数二');
        AdoQuery.Exec;
        data := DataSetProvider.Data;
      except
        on E: Exception do
        begin
          Result := False;
          err := E.Message;
        end;
      end;
    end;//代码没有经过调试,思路就是这样,如果还有什么问题,请加入QQ高级群:9642802 找管理员讨论!
      

  7.   

    别OPEN,OPen是必须要有返回内容的。存储过程不一定有: 你可以CDS.excute; 
      

  8.   

    楼主,我昨天也做了一个像你这样的存储功能,没问题,你在你的存储过程中创建个临时表,把你select出来的数据插入到临时表中,在存储过程结尾在加一句select * from 临时表 ,在客户端的clientdataset的
    commandtext 中,填入select * from exec 存储过程,值1,值2..., 然后Open 就OK了,直接得到一张表。