Office中国论坛/Access中国论坛

标题: ADO函数如何在获取Recordset对象后关闭Connection [打印本页]

作者: LeeTien    时间: 2012-3-31 08:03
标题: ADO函数如何在获取Recordset对象后关闭Connection
本帖最后由 LeeTien 于 2012-3-31 08:04 编辑

写了一个ADO函数来获取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

现在面临这样一个问题:要获取Recordset对象,不能在函数体内关闭Connection对象,也就是不能执行con.Close操作。这样会使程序一直占用连接,有什么办法在获取Recordset对象后关闭Connection对象吗。
作者: roych    时间: 2012-4-1 01:08
不太可能吧。
从顺序上说,应该是先建立数据连接才能获取记录集,因此关闭连接后记录集也将随之消失。这就意味着,如果想尽快关闭数据连接的话,就必须想办法先对记录集进行相应的操作。
对于更新、删除和追加等操作的要求略低,倒也无所谓;但是如果是选择查询的话,一旦关闭记录集和数据连接,用户将无法看到任何数据,这后果似乎很严重吧?

个人更倾向于使用链接表的形式来处理。
作者: zhuyiwen    时间: 2012-4-1 02:52
其实,方案是可行的,但代码的做法不对。

你可以参考小宝的《主子窗体批量保存》的"ADO的断开连接和批更新"。
作者: LeeTien    时间: 2012-4-1 09:21
已解决无需再回复
谢谢
在ADO 必须保持Connection才获取Recordset
这个在ADO中无法实现
通过ADO.net
才用这个设计
作者: zhuyiwen    时间: 2012-4-1 09:42
搞不懂!
作者: allen_peng    时间: 2012-4-1 09:59
{:soso_e130:}
作者: LeeTien    时间: 2012-4-1 10:08
ADO无法实现
ADO.net已解决了
这是设计问题
数据量小时怎么连接都没神马问题
大并发时ADO的弊端就出来了
作者: zhuyiwen    时间: 2012-4-1 11:04
事实上ADO.NET是ADO的进化版,它比ADO强是毫无疑问的。但它需要更多的资源,如.NET Framework。如果懂得如何用.NET Framework来开发程序,那么就可以放弃Access了。

ADO Recordset设计断开记录集目的就是为了可以断开ADO Connection,并且还能保存为持久记录集(磁盘文件 XML),并允许重新连接更新数据库,但它的前提是使用批处理更新方式,你使用键集肯定会遇到失败。你下ADO无法实现的结论,个人认为有点草率。
作者: 风中漫步    时间: 2012-4-1 12:54
哇,高深,学习{:soso_e103:}
作者: aslxt    时间: 2012-4-1 17:53
其实,不用更高级的软件,应该也可以实现:
取得记录集后,把他保存到一个窗体,就可以关闭连接了。需要使用该记录集的时候,用RecordsetClone就可以。
未经测试!





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