|
|
导航: |
论坛 -> 数据库专区
斑竹:liumazi,waterstone |
|
作者: |
|
2016/4/13 20:15:02 |
标题: |
FireDAC读取存储过程返回的多个数据集问题 |
浏览:4955 |
|
加入我的收藏 |
楼主: |
有个存储过程,传入若干参数,会返回多个数据集。
如果用FireDAC里的TFDStoredProc控件,如果FetchOptions.AutoClose默认True的话,只能返回首个数据集,因为调用NextRecordSet方法时会自动close
而按照资料上介绍的,将FetchOptions.AutoClose默认False时,调用NextRecordSet方法时,则会出现如下错误,也无法获得下个数据集:
[EMSSQLNativeException]-[FireDAC][Phys][ODBC][Microsoft][ODBC SQL Server Driver]连接占线导致另一个 hstmt
MARS选项也是设置为True的,可是,始终无法正常工作。 请教各位,有啥好的办法解决?
----------------------------------------------
樵夫的大马甲 |
作者: |
|
2016/4/13 20:20:35 |
1楼: |
// // 打开,得到首个数据集... procedure TForm1.Button13Click(Sender: TObject); begin sp.Open(); end;
此帖子包含附件:
大小:22.5K |
----------------------------------------------
樵夫的大马甲
|
作者: |
|
2016/4/13 20:21:18 |
2楼: |
// // 读下个数据集... procedure TForm1.Button14Click(Sender: TObject); begin sp.NextRecordSet; end;
此帖子包含附件:
大小:30.3K |
----------------------------------------------
樵夫的大马甲
|
作者: |
|
2016/4/13 20:49:34 |
3楼: |
两个同时打开了,就有这提示。理论上上个连接close就可以了
----------------------------------------------
-
|
作者: |
|
2016/4/16 10:28:08 |
4楼: |
我测试没问题,存储过程就是两条select语句,不知道你是存储过程是什么样的。
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
|
作者: |
|
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
试了很多了,一直不行,今天又试,还是这样
----------------------------------------------
樵夫的大马甲
|
作者: |
|
2016/4/16 22:14:01 |
6楼: |
樵老大,请问你在ADO中是如何取第二个数据集的呢?用你的这个分页存储过程,ADO中我也不能取第二个数据集呢。
----------------------------------------------
-
|
作者: |
|
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楼: |
我测试了你的存储过程,是正常的
----------------------------------------------
-
|
作者: |
|
2016/4/17 18:38:46 |
9楼: |
谢谢各位! ADO和UniDAC都没问题!
FireDAC就是不行!升级到D10 Update1,也是这个错!
砍柴的.这个是驱动问题.你看看这个吧 http://www.2pascal.com/thread-2592-1-1.html ---------- 这个也试了,一样的错误!
----------------------------------------------
樵夫的大马甲
|
作者: |
|
2016/4/17 18:54:13 |
10楼: |
码子发上来 请各位检查! 代码是另一位据说没问题的朋友写的,但我一跑,就是这个错!
----------------------------------------------
樵夫的大马甲
|
作者: |
|
2016/4/17 19:47:02 |
11楼: |
我的数据库是SQL Server 2000 win10/win7/win2003 server,都试了,都是这个错
----------------------------------------------
樵夫的大马甲
|
作者: |
|
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/
|
作者: |
|
2016/4/18 15:19:38 |
14楼: |
谢谢楼上! 我试下
----------------------------------------------
樵夫的大马甲
|
作者: |
|
2016/4/18 15:32:39 |
15楼: |
我试了ODBCDriver属性,改为“SQL Server”了,但是,SQL Server 2000还是一样的占线错误
----------------------------------------------
樵夫的大马甲
|
作者: |
|
2018/11/13 15:58:23 |
16楼: |
页面的create事件里,所有的FDQuery,FDTable的FetchOptions->Mode = fmAll 就好了。 FDQuery3->FetchOptions->Mode = fmAll;
----------------------------------------------
-
|
作者: |
|
2018/11/13 19:23:51 |
17楼: |
16楼正解 FetchOptions->Mode = fmAll
----------------------------------------------
-
|
|