Office中国论坛/Access中国论坛

标题: ADO调用存储过程之后 RecordCount=-1 解决办法 [打印本页]

作者: 盗梦    时间: 2014-11-12 13:22
标题: ADO调用存储过程之后 RecordCount=-1 解决办法
本帖最后由 盗梦 于 2014-11-12 14:12 编辑

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

解决方法:
       再通过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



作者: roych    时间: 2014-11-12 13:56
谢谢关注,当时只测试了单个数值条件的存储过程。诚如你所说,确实不能使用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
复制代码

作者: cfedf    时间: 2014-11-12 14:00
想问一下楼主,这个测试是怎么做,在哪里做?需要在窗体建立command按键然后在里面写代码,是这个过程吗?

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

除了弄按钮,还需要在SQL数据库中创建一个存储过程以供测试
作者: 盗梦    时间: 2014-11-12 14:11
roych 发表于 2014-11-12 13:56
谢谢关注,当时只测试了单个数值条件的存储过程。诚如你所说,确实不能使用RecordCount属性。不打开记录集 ...

主要是想把记录集赋给子窗体,才会发现这个错误
作者: roych    时间: 2014-11-12 14:18
盗梦 发表于 2014-11-12 14:11
主要是想把记录集赋给子窗体,才会发现这个错误

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

也可以在模块里建立,然后Call它。
作者: 盗梦    时间: 2014-11-12 14:22
roych 发表于 2014-11-12 14:18
当时以access来测试,而且只是用单值,没考虑那么周全。不管怎么说,发现问题,一起研究下对大家都是 ...

研究了一个上午。应该是游标的问题
作者: zhuyiwen    时间: 2014-11-12 15:09
你定义连接的游标试试

呵呵
作者: 盗梦    时间: 2014-11-12 15:24
zhuyiwen 发表于 2014-11-12 15:09
你定义连接的游标试试

呵呵






欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3