设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[ADO/DAO] 奇怪ADODB.recordset不能返回数据?

[复制链接]
跳转到指定楼层
1#
发表于 2004-12-28 00:15:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是关键代码,strSQL 为正确的T-SQL语句,在查询分析器可得到正确的结果,但以下代码不能返回任何数据,原因才哪里?

Public Sub sdfad()

   Dim rst As ADODB.Recordset

   Dim strSQL As String

   

        If rst Is Nothing Then

            Set rst = New ADODB.Recordset

            rst.CursorLocation = adUseClient

            rst.CursorType = adOpenStatic

            rst.LockType = adLockReadOnly

            rst.ActiveConnection = CurrentProject.Connection

            rst.CacheSize = 30

        End If

        

        If rst.state <> 0 Then

            rst.Close

        End If

        

        strSQL = "_RPT @warehouse_code='1001 ',@range_code='200412'"

        Set rst = CurrentProject.Connection.Execute(strSQL, 20)

        

        Debug.Print CurrentProject.Connection.Errors.Count   '结果为 0

        Debug.Print Err.number   '结果为0

        

        'rst.Open strSQL, CurrentProject.Connection '同样的错误,没有返回任何数据

        Debug.Print rst.state = ADODB.adStateClosed '结果为True

        Debug.Print rst.Fields.Count, "F"

        Debug.Print rst.RecordCount, "R" '提示对象是关闭的

        Do Until rst.EOF

            Debug.Print rst.Fields(0)

        rst.MoveNext

        Loop

        rst.Close

End Sub

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2004-12-28 00:16:00 | 只看该作者
strSQL = "_RPT @warehouse_code='1001 ',@range_code='200412'"

_RPT 为一个正确的存储过程名称。
3#
发表于 2004-12-31 17:53:00 | 只看该作者
用ado.command.execute即可解决!
4#
 楼主| 发表于 2005-1-3 05:14:00 | 只看该作者
用以上代码,却正确返回另外一个存储过程的结果集

但是对于这一存储过程,用HG的方法一样失败。

郁闷....
5#
发表于 2005-1-9 06:41:00 | 只看该作者
先按照存储过程的参数顺序改成一个简化的怎么样?例如:

Set rst = CurrentProject.Connection.Execute("_RPT '1001','200412'", 20)

6#
 楼主| 发表于 2005-1-18 02:20:00 | 只看该作者
奇怪的很,无论怎么搞都不行,以下不带任何参数的测试样本,结果也是一样,无返回值!!

CREATE DATABASE _TempDbForTest

gouse _TempDbForTest

gocreate procedure _prc_test_retrunRows

as

begincreate table #abc

( f int,

  d char (100)

)insert into #abc

select 2,'fadsfdsf'

union all select 30, 'dfdetchnzi 'select * from #abcdrop table #abcendgoexecute _prc_test_retrunRows

go

点击这里给我发消息

7#
发表于 2005-1-18 04:44:00 | 只看该作者
弄清了你的问题,呵呵

事实上,你的存储过程产生了两个记录集,第一个是由语句:



insert into #abc

select 2,'fadsfdsf'

union all select 30, 'dfdetchnzi '

产生的。这个事实上是产生的一个空记录集,无结果!

第二个是由语句:



select * from #abc

产生的。这个产生的含有两条记录的记录集。

因此,用ADO访问时应该是这样的:



Sub Test()

   Dim rs1 As ADODB.Recordset, rs2 As ADODB.Recordset

   Set rs1 = CurrentProject.Connection.Execute("Exec _prc_test_retrunRows")

   Set rs2 = rs1.NextRecordset

   Debug.Print rs2.RecordCount    ' 返回2 正确的记录集

End Sub

[此贴子已经被作者于2005-1-17 21:02:00编辑过]

8#
发表于 2005-1-18 16:44:00 | 只看该作者
nextRecordSet方法,真是精彩! 另:在storedProc中用set nocount on应该也有效果吧?
9#
 楼主| 发表于 2005-1-18 20:16:00 | 只看该作者

回复:(goodidea)奇怪ADODB.recordset不能返回数据?...

难怪我有部分过程可以“正确”返回数据~~~

没有想到Set Nocount On还有这个作用。

多谢zhuyiwen, 阿罗, Tmtony.

再次感谢!

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

本版积分规则

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

GMT+8, 2024-5-16 13:42 , Processed in 0.103173 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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