設為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 4206|回復: 8
打印 上一主題 下一主題

[ADO/DAO] 奇怪ADODB.recordset不能返回數(shù)據(jù)?

[復制鏈接]
跳轉到指定樓層
1#
發(fā)表于 2004-12-28 00:15:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
下面是關鍵代碼,strSQL 為正確的T-SQL語句,在查詢分析器可得到正確的結果,但以下代碼不能返回任何數(shù)據(jù),原因才哪里?

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 '同樣的錯誤,沒有返回任何數(shù)據(jù)

        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#
 樓主| 發(fā)表于 2004-12-28 00:16:00 | 只看該作者
strSQL = "_RPT @warehouse_code='1001 ',@range_code='200412'"

_RPT 為一個正確的存儲過程名稱。
3#
發(fā)表于 2004-12-31 17:53:00 | 只看該作者
用ado.command.execute即可解決!
4#
 樓主| 發(fā)表于 2005-1-3 05:14:00 | 只看該作者
用以上代碼,卻正確返回另外一個存儲過程的結果集

但是對于這一存儲過程,用HG的方法一樣失敗。

郁悶....
5#
發(fā)表于 2005-1-9 06:41:00 | 只看該作者
先按照存儲過程的參數(shù)順序改成一個簡化的怎么樣?例如:

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

6#
 樓主| 發(fā)表于 2005-1-18 02:20:00 | 只看該作者
奇怪的很,無論怎么搞都不行,以下不帶任何參數(shù)的測試樣本,結果也是一樣,無返回值!

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

點擊這里給我發(fā)消息

7#
發(fā)表于 2005-1-18 04:44:00 | 只看該作者
弄清了你的問題,呵呵

事實上,你的存儲過程產(chǎn)生了兩個記錄集,第一個是由語句:



insert into #abc

select 2,'fadsfdsf'

union all select 30, 'dfdetchnzi '

產(chǎn)生的。這個事實上是產(chǎn)生的一個空記錄集,無結果!

第二個是由語句:



select * from #abc

產(chǎn)生的。這個產(chǎn)生的含有兩條記錄的記錄集。

因此,用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

[此貼子已經(jīng)被作者于2005-1-17 21:02:00編輯過]

8#
發(fā)表于 2005-1-18 16:44:00 | 只看該作者
nextRecordSet方法,真是精彩! 另:在storedProc中用set nocount on應該也有效果吧?
9#
 樓主| 發(fā)表于 2005-1-18 20:16:00 | 只看該作者

回復:(goodidea)奇怪ADODB.recordset不能返回數(shù)據(jù)?...

難怪我有部分過程可以“正確”返回數(shù)據(jù)~~~

沒有想到Set Nocount On還有這個作用。

多謝zhuyiwen, 阿羅, Tmtony.

再次感謝!

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2024-10-23 08:40 , Processed in 0.113912 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表