Office中国论坛/Access中国论坛

标题: 奇怪ADODB.recordset不能返回数据? [打印本页]

作者: goodidea    时间: 2004-12-28 00:15
标题: 奇怪ADODB.recordset不能返回数据?
下面是关键代码,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


作者: goodidea    时间: 2004-12-28 00:16
strSQL = "_RPT @warehouse_code='1001 ',@range_code='200412'"

_RPT 为一个正确的存储过程名称。
作者: HG    时间: 2004-12-31 17:53
用ado.command.execute即可解决!
作者: goodidea    时间: 2005-1-3 05:14
用以上代码,却正确返回另外一个存储过程的结果集

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

郁闷....
作者: 阿罗    时间: 2005-1-9 06:41
先按照存储过程的参数顺序改成一个简化的怎么样?例如:

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


作者: goodidea    时间: 2005-1-18 02:20
奇怪的很,无论怎么搞都不行,以下不带任何参数的测试样本,结果也是一样,无返回值!!

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
作者: zhuyiwen    时间: 2005-1-18 04:44
弄清了你的问题,呵呵

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



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编辑过]


作者: 阿罗    时间: 2005-1-18 16:44
nextRecordSet方法,真是精彩! 另:在storedProc中用set nocount on应该也有效果吧?
作者: goodidea    时间: 2005-1-18 20:16
标题: 回复:(goodidea)奇怪ADODB.recordset不能返回数据?...
难怪我有部分过程可以“正确”返回数据~~~

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

多谢zhuyiwen, 阿罗, Tmtony.

再次感谢!






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