设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3217|回复: 9
打印 上一主题 下一主题

[ADO/DAO] ADO函数如何在获取Recordset对象后关闭Connection

[复制链接]
跳转到指定楼层
1#
发表于 2012-3-31 08:03:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
6金钱
本帖最后由 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对象吗。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2012-4-1 01:08:17 | 只看该作者
不太可能吧。
从顺序上说,应该是先建立数据连接才能获取记录集,因此关闭连接后记录集也将随之消失。这就意味着,如果想尽快关闭数据连接的话,就必须想办法先对记录集进行相应的操作。
对于更新、删除和追加等操作的要求略低,倒也无所谓;但是如果是选择查询的话,一旦关闭记录集和数据连接,用户将无法看到任何数据,这后果似乎很严重吧?

个人更倾向于使用链接表的形式来处理。
回复

使用道具 举报

点击这里给我发消息

3#
发表于 2012-4-1 02:52:29 | 只看该作者
其实,方案是可行的,但代码的做法不对。

你可以参考小宝的《主子窗体批量保存》的"ADO的断开连接和批更新"。
回复

使用道具 举报

4#
 楼主| 发表于 2012-4-1 09:21:54 | 只看该作者
已解决无需再回复
谢谢
在ADO 必须保持Connection才获取Recordset
这个在ADO中无法实现
通过ADO.net
才用这个设计
回复

使用道具 举报

点击这里给我发消息

5#
发表于 2012-4-1 09:42:21 | 只看该作者
搞不懂!
回复

使用道具 举报

6#
发表于 2012-4-1 09:59:30 | 只看该作者
{:soso_e130:}
回复

使用道具 举报

7#
 楼主| 发表于 2012-4-1 10:08:49 | 只看该作者
ADO无法实现
ADO.net已解决了
这是设计问题
数据量小时怎么连接都没神马问题
大并发时ADO的弊端就出来了
回复

使用道具 举报

点击这里给我发消息

8#
发表于 2012-4-1 11:04:38 | 只看该作者
事实上ADO.NET是ADO的进化版,它比ADO强是毫无疑问的。但它需要更多的资源,如.NET Framework。如果懂得如何用.NET Framework来开发程序,那么就可以放弃Access了。

ADO Recordset设计断开记录集目的就是为了可以断开ADO Connection,并且还能保存为持久记录集(磁盘文件 XML),并允许重新连接更新数据库,但它的前提是使用批处理更新方式,你使用键集肯定会遇到失败。你下ADO无法实现的结论,个人认为有点草率。
回复

使用道具 举报

9#
发表于 2012-4-1 12:54:04 | 只看该作者
哇,高深,学习{:soso_e103:}
回复

使用道具 举报

10#
发表于 2012-4-1 17:53:18 | 只看该作者
其实,不用更高级的软件,应该也可以实现:
取得记录集后,把他保存到一个窗体,就可以关闭连接了。需要使用该记录集的时候,用RecordsetClone就可以。
未经测试!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-29 09:55 , Processed in 0.101185 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表