设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 9201|回复: 9
打印 上一主题 下一主题

[ADO/DAO] ADO调用存储过程之后 RecordCount=-1 解决办法

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2014-11-12 13:22:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 盗梦 于 2014-11-12 14:12 编辑

问题描述:
       今天 roych斑竹 发了一些有关ADO的贴。其中有用Command调用存储过程的示例。
我尝试了一下。可以返回记录集。
       不过,这个记录集有些不一样:RecordCount=-1。而且使用rs.MoveLast方法也会报错。好像是没有游标导致的。
       我再把这个记录集赋给一个子窗体,就报错了。
      

解决方法:
       再通过Command对象打开一次记录集即可。        
  1. Dim rs As New ADODB.Recordset
  2. Dim Cmd As New ADODB.Command
  3.         
  4. Cmd.ActiveConnection = Conn '设置连接
  5. Cmd.CommandText = "execute 存储过程名 '参数1','参数2'"

  6. 'Set rs = Cmd.Execute  '此操作,不能获取记录集的RecordCount的值,永远只能返回-1
  7. '方法二:用Cmd打开记录集
  8. Cmd.Execute
  9. rs.Open Cmd, , adOpenKeyset, adOpenKeyset    '此方法可以获取 RecordCount
复制代码

        这样处理之后,可以返回RecordCount,也可以将记录集赋给子窗体
        PS:这里也引出一个东西。我们打开记录集Open方法,还可以通过Command对象打开

注:roych斑竹的贴:【新手进阶】之十八:浅谈ADO之Command(下)
       http://www.office-cn.net/thread-119044-1-1.html


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1经验 +12 收起 理由
tmtony + 12

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2014-11-12 13:56:35 | 只看该作者
谢谢关注,当时只测试了单个数值条件的存储过程。诚如你所说,确实不能使用RecordCount属性。不打开记录集的时候,我们还是可以用MoveNext方法,以及EOF属性来执行循环的。
  1. Sub showpro()
  2. Dim rst As New ADODB.Recordset
  3. Dim cmd As New ADODB.Command
  4. cmd.ActiveConnection = CurrentProject.Connection
  5. cmd.CommandText = "execute mypro 1"
  6. Set rst = cmd.Execute
  7. Do Until rst.EOF
  8. Debug.Print rst(1)
  9.     rst.MoveNext
  10. Loop
  11. End Sub
复制代码
3#
发表于 2014-11-12 14:00:59 来自手机 | 只看该作者
想问一下楼主,这个测试是怎么做,在哪里做?需要在窗体建立command按键然后在里面写代码,是这个过程吗?

点击这里给我发消息

4#
 楼主| 发表于 2014-11-12 14:10:37 | 只看该作者
cfedf 发表于 2014-11-12 14:00
想问一下楼主,这个测试是怎么做,在哪里做?需要在窗体建立command按键然后在里面写代码,是这个过程吗?
...

除了弄按钮,还需要在SQL数据库中创建一个存储过程以供测试

点击这里给我发消息

5#
 楼主| 发表于 2014-11-12 14:11:09 | 只看该作者
roych 发表于 2014-11-12 13:56
谢谢关注,当时只测试了单个数值条件的存储过程。诚如你所说,确实不能使用RecordCount属性。不打开记录集 ...

主要是想把记录集赋给子窗体,才会发现这个错误
6#
发表于 2014-11-12 14:18:32 | 只看该作者
盗梦 发表于 2014-11-12 14:11
主要是想把记录集赋给子窗体,才会发现这个错误

当时以access来测试,而且只是用单值,没考虑那么周全。不管怎么说,发现问题,一起研究下对大家都是有帮助的。
7#
发表于 2014-11-12 14:20:28 | 只看该作者
cfedf 发表于 2014-11-12 14:00
想问一下楼主,这个测试是怎么做,在哪里做?需要在窗体建立command按键然后在里面写代码,是这个过程吗?
...

也可以在模块里建立,然后Call它。

点击这里给我发消息

8#
 楼主| 发表于 2014-11-12 14:22:13 | 只看该作者
roych 发表于 2014-11-12 14:18
当时以access来测试,而且只是用单值,没考虑那么周全。不管怎么说,发现问题,一起研究下对大家都是 ...

研究了一个上午。应该是游标的问题

点击这里给我发消息

9#
发表于 2014-11-12 15:09:52 | 只看该作者
你定义连接的游标试试

呵呵

点击这里给我发消息

10#
 楼主| 发表于 2014-11-12 15:24:05 | 只看该作者
zhuyiwen 发表于 2014-11-12 15:09
你定义连接的游标试试

呵呵

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-25 07:41 , Processed in 0.097422 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表