用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两层执行没问题 可以返回结果
但是 三层 就不行
不知如何解决
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两层执行没问题 可以返回结果
但是 三层 就不行
不知如何解决
你可以在后面加一句:
select 1
这个存储过程 在两层下用adoQUERY可以查询到结果集
不用cds 只用adoquery 运行 可以返回查询的记录集
clientdata最好不要直接和数据库打交道。
假设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 找管理员讨论!
commandtext 中,填入select * from exec 存储过程,值1,值2..., 然后Open 就OK了,直接得到一张表。