DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: 125990214
今日帖子: 15
在线用户: 4
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲△△ -
注册会员
2016/4/13 20:15:02
标题:
FireDAC读取存储过程返回的多个数据集问题 浏览:2707
加入我的收藏
楼主: 有个存储过程,传入若干参数,会返回多个数据集。


如果用FireDAC里的TFDStoredProc控件,如果FetchOptions.AutoClose默认True的话,只能返回首个数据集,因为调用NextRecordSet方法时会自动close

而按照资料上介绍的,将FetchOptions.AutoClose默认False时,调用NextRecordSet方法时,则会出现如下错误,也无法获得下个数据集:

[EMSSQLNativeException]-[FireDAC][Phys][ODBC][Microsoft][ODBC SQL Server Driver]连接占线导致另一个 hstmt


MARS选项也是设置为True的,可是,始终无法正常工作。 请教各位,有啥好的办法解决?
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲△△ -
注册会员
2016/4/13 20:20:35
1楼:
//
// 打开,得到首个数据集...
procedure TForm1.Button13Click(Sender: TObject);
begin
   sp.Open();
end;
此帖子包含附件:
PNG 图像
大小:22.5K
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲△△ -
注册会员
2016/4/13 20:21:18
2楼: //
// 读下个数据集...
procedure TForm1.Button14Click(Sender: TObject);
begin
   sp.NextRecordSet;
end;
此帖子包含附件:
PNG 图像
大小:30.3K
----------------------------------------------
樵夫的大马甲
作者:
男 wuxi15 (似水·流年) ▲▲▲△△ -
注册会员
2016/4/13 20:49:34
3楼: 两个同时打开了,就有这提示。理论上上个连接close就可以了
----------------------------------------------
-
作者:
男 earthsbest (全能中间件) ▲▲△△△ -
注册会员
2016/4/16 10:28:08
4楼: 我测试没问题,存储过程就是两条select语句,不知道你是存储过程是什么样的。
----------------------------------------------
Delphi4Linux交流群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲△△ -
注册会员
2016/4/16 15:40:15
5楼: --sql分页存储过程
--@sqlstr  查询语句
--@currentpage 当前页码
--@pagesize每页信息数
--返回值
---1、记录数
---2、符合条件的记录集
CREATE procedure PagingQuery
@sqlstr nvarchar(4000), --查询字符串
@currentpage int, --第N页
@pagesize int, --每页行数
@allrecords int OUTPUT  --返回的总记录数
as
set nocount on
declare @P1 int, --P1是游标的id
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
set @allrecords=@rowcount
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off
GO


试了很多了,一直不行,今天又试,还是这样
----------------------------------------------
樵夫的大马甲
作者:
男 idealstudio (ideal) ★☆☆☆☆ -
盒子活跃会员
2016/4/16 22:14:01
6楼: 樵老大,请问你在ADO中是如何取第二个数据集的呢?用你的这个分页存储过程,ADO中我也不能取第二个数据集呢。
----------------------------------------------
-
作者:
男 wuxi15 (似水·流年) ▲▲▲△△ -
注册会员
2016/4/17 2:07:39
7楼: 砍柴的.这个是驱动问题.你看看这个吧
http://www.2pascal.com/thread-2592-1-1.html
----------------------------------------------
-
作者:
男 roker (roker) ★☆☆☆☆ -
盒子活跃会员
2016/4/17 9:47:54
8楼: 我测试了你的存储过程,是正常的
----------------------------------------------
-
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲△△ -
注册会员
2016/4/17 18:38:46
9楼: 谢谢各位!
ADO和UniDAC都没问题!

FireDAC就是不行!升级到D10 Update1,也是这个错!



 砍柴的.这个是驱动问题.你看看这个吧
http://www.2pascal.com/thread-2592-1-1.html 
----------
这个也试了,一样的错误!
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲△△ -
注册会员
2016/4/17 18:54:13
10楼: 码子发上来
请各位检查!  代码是另一位据说没问题的朋友写的,但我一跑,就是这个错!
此帖子包含附件:jopher3_2016417185413.rar 大小:53.7K
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲△△ -
注册会员
2016/4/17 19:47:02
11楼: 我的数据库是SQL Server 2000
win10/win7/win2003 server,都试了,都是这个错
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲△△ -
注册会员
2016/4/17 20:32:48
12楼: 原因找到!
是SQL Server 2000的原因,FireDAC不支持SQL Server 2000的存储过程返回多个数据集。

蛋疼
----------------------------------------------
樵夫的大马甲
作者:
男 hs_kill (lzl_17948876) ▲▲▲▲▲ -
普通会员
2016/4/18 14:48:48
13楼: @jopher3
你的机器里装有几个SQL Server版本, 如果是多个的话, 默认会使用最高版本的那个连接库, 但是这个在连接SQL Server 2000时有各种奇怪的问题
你看看你的FDPhysMSSQLDriverLink1这个里面的ODBCDriver属性, 下拉出来指定使用"SQL Server"再试试, 不要使用Native那些

我这里用SQL Server 2000 多结果集返回获取是没问题的
----------------------------------------------
http://www.cnblogs.com/lzl_17948876/
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲△△ -
注册会员
2016/4/18 15:19:38
14楼: 谢谢楼上!
我试下
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲△△ -
注册会员
2016/4/18 15:32:39
15楼: 我试了ODBCDriver属性,改为“SQL Server”了,但是,SQL Server 2000还是一样的占线错误
----------------------------------------------
樵夫的大马甲
作者:
男 sunshinedelphi (sunshine) ★☆☆☆☆ -
盒子活跃会员
2018/11/13 15:58:23
16楼: 页面的create事件里,所有的FDQuery,FDTable的FetchOptions->Mode = fmAll 就好了。
FDQuery3->FetchOptions->Mode = fmAll;
----------------------------------------------
-
作者:
男 ksrsoft (cb168) ★☆☆☆☆ -
注册会员
2018/11/13 19:23:51
17楼: 16楼正解 FetchOptions->Mode = fmAll
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行35.15625毫秒 RSS