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