設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

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

[ADO/DAO] ADO函數(shù)如何在獲取Recordset對象后關(guān)閉Connection

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2012-3-31 08:03:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
6金錢
本帖最后由 LeeTien 于 2012-3-31 08:04 編輯

寫了一個ADO函數(shù)來獲取Recordset對象
如下:
Public Function ADORs(ByVal data As String, ByVal Password As String, ByVal sql As String) As ADODB.Recordset

    Dim con As ADODB.Connection
    Dim rs As ADODB.Recordset
   
    If con Is Nothing Then
        Set con = New ADODB.Connection
        Set rs = New ADODB.Recordset
    End If
      
    If Len(Password) = 0 Then
        con.ConnectionString = "provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & data & "ersist Security Info=False"
    Else
        con.ConnectionString = "provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & data & ";Jet OLEDBatabase Password=" & masterDataPassword
    End If
    con.Open
    rs.CursorLocation = adUseClient
    sql = Trim(sql)
    rs.Open sql, con, adOpenKeyset, adLockPessimistic
   
    Set ADORs = rs

End Function

現(xiàn)在面臨這樣一個問題:要獲取Recordset對象,不能在函數(shù)體內(nèi)關(guān)閉Connection對象,也就是不能執(zhí)行con.Close操作。這樣會使程序一直占用連接,有什么辦法在獲取Recordset對象后關(guān)閉Connection對象嗎。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖 訂閱訂閱
2#
發(fā)表于 2012-4-1 01:08:17 | 只看該作者
不太可能吧。
從順序上說,應(yīng)該是先建立數(shù)據(jù)連接才能獲取記錄集,因此關(guān)閉連接后記錄集也將隨之消失。這就意味著,如果想盡快關(guān)閉數(shù)據(jù)連接的話,就必須想辦法先對記錄集進行相應(yīng)的操作。
對于更新、刪除和追加等操作的要求略低,倒也無所謂;但是如果是選擇查詢的話,一旦關(guān)閉記錄集和數(shù)據(jù)連接,用戶將無法看到任何數(shù)據(jù),這后果似乎很嚴(yán)重吧?

個人更傾向于使用鏈接表的形式來處理。
回復(fù)

使用道具 舉報

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

3#
發(fā)表于 2012-4-1 02:52:29 | 只看該作者
其實,方案是可行的,但代碼的做法不對。

你可以參考小寶的《主子窗體批量保存》的"ADO的斷開連接和批更新"。
回復(fù)

使用道具 舉報

4#
 樓主| 發(fā)表于 2012-4-1 09:21:54 | 只看該作者
已解決無需再回復(fù)
謝謝
在ADO 必須保持Connection才獲取Recordset
這個在ADO中無法實現(xiàn)
通過ADO.net
才用這個設(shè)計
回復(fù)

使用道具 舉報

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

5#
發(fā)表于 2012-4-1 09:42:21 | 只看該作者
搞不懂!
回復(fù)

使用道具 舉報

6#
發(fā)表于 2012-4-1 09:59:30 | 只看該作者
{:soso_e130:}
回復(fù)

使用道具 舉報

7#
 樓主| 發(fā)表于 2012-4-1 10:08:49 | 只看該作者
ADO無法實現(xiàn)
ADO.net已解決了
這是設(shè)計問題
數(shù)據(jù)量小時怎么連接都沒神馬問題
大并發(fā)時ADO的弊端就出來了
回復(fù)

使用道具 舉報

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

8#
發(fā)表于 2012-4-1 11:04:38 | 只看該作者
事實上ADO.NET是ADO的進化版,它比ADO強是毫無疑問的。但它需要更多的資源,如.NET Framework。如果懂得如何用.NET Framework來開發(fā)程序,那么就可以放棄Access了。

ADO Recordset設(shè)計斷開記錄集目的就是為了可以斷開ADO Connection,并且還能保存為持久記錄集(磁盤文件 XML),并允許重新連接更新數(shù)據(jù)庫,但它的前提是使用批處理更新方式,你使用鍵集肯定會遇到失敗。你下ADO無法實現(xiàn)的結(jié)論,個人認(rèn)為有點草率。
回復(fù)

使用道具 舉報

9#
發(fā)表于 2012-4-1 12:54:04 | 只看該作者
哇,高深,學(xué)習(xí){:soso_e103:}
回復(fù)

使用道具 舉報

10#
發(fā)表于 2012-4-1 17:53:18 | 只看該作者
其實,不用更高級的軟件,應(yīng)該也可以實現(xiàn):
取得記錄集后,把他保存到一個窗體,就可以關(guān)閉連接了。需要使用該記錄集的時候,用RecordsetClone就可以。
未經(jīng)測試!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

GMT+8, 2025-7-17 06:09 , Processed in 0.212104 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表