| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 585 人关注过本帖
标题:vb的DLL中操作数据库对象的奇怪问题,望高手帮助
只看楼主 加入收藏
寻找
Rank: 2
等 级:论坛游民
帖 子:132
专家分:19
注 册:2007-3-2
结帖率:100%
收藏
 问题点数:0 回复次数:2 
vb的DLL中操作数据库对象的奇怪问题,望高手帮助
采用VB写了一个ax Dll, 主要用于操作数据库的,里面有一函数
如,这里的rs属于窗体模块级别变量
Public Sub aa(rs As Recordset)
rs.Close
Set rs = Nothing'释放记录集
End Sub
上面函数很清楚
奇怪的是这样

我在一函数过程中如果调用
dll对象.aa(rs)的话,在这个过程中rs关闭并释放正确了(注意,是在这过程中,就是我调用aa
函数后,再调用set rs=nothing是不行的,这里没有问题)
但在这个跳出这个过程之后再次调用set rs=nothing 可以正确的,证明rs没有被释放
就如
private sub bb()
dll对象.aa(rs)
'set rs=nothing '这里不能再释放
end sub
Private Sub Form_Load()
Call bb
set rs=nothing'这里有问题,为什么上面的过程中rs没有被释放
end sub
不好意思,楼下朋友说我说得问题不清楚,我重新说一下,红色文字为问题重点
'===============================================================
说得好乱么?不好意思,我的意思是我用vb写了一个dll
主要用于数据库连接的操作
里面有一过程如下
Public Sub aa(rs As Recordset)'这里的rs是参数
rs.Close
Set rs = Nothing'释放记录集
End Sub
然后我在窗体form1中引用这个dll
在窗体的通用中声明adodb对象
private rs as new Recordset
private conn as new ........连接数据库对象忘记对象名
private dlldx as new 创建dll对象实例
Private Sub Form_Load()
conn.....这里是连接数据库..省略
rs.Open......这里是打开数据库表到记录集
End Sub
。。。。在使用完应该要关闭数据库连接与记录集
假如我在卸载窗体过程中释放与关闭adodb对象

Private Sub Form_Unload(Cancel As Integer)
Call dlldx.aa(rs)'注意看这里,从这里看到,我通过调用dll的aa过程,传入rs对象关闭与释放
但其实只是关闭了rs,没有实际释放
必须还要再次调用
set rs=nothing'再次调用此句才真正释放,问题就在这里,为什么我上调用的aa过程没有释放rs对象呢?
conn.Close
set conn =nothing
End Sub

请高手帮助解答

[ 本帖最后由 寻找 于 2010-4-21 20:25 编辑 ]
搜索更多相关主题的帖子: DLL 数据库 对象 
2010-04-20 20:22
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:0 
说得好乱。
2010-04-21 17:02
寻找
Rank: 2
等 级:论坛游民
帖 子:132
专家分:19
注 册:2007-3-2
收藏
得分:0 
说得好乱么?不好意思,我的意思是我用vb写了一个dll
主要用于数据库连接的操作
里面有一过程如下
Public Sub aa(rs As Recordset)'这里的rs是参数
rs.Close
Set rs = Nothing'释放记录集
End Sub
然后我在窗体form1中引用这个dll
在窗体的通用中声明adodb对象
private rs as new Recordset
private conn as new ........连接数据库对象忘记对象名
private dlldx as new 创建dll对象实例
Private Sub Form_Load()
conn.....这里是连接数据库..省略
rs.Open......这里是打开数据库表到记录集
End Sub
。。。。在使用完应该要关闭数据库连接与记录集
假如我在卸载窗体过程中关于与释放adodb对象
Private Sub Form_Unload(Cancel As Integer)
Call dlldx.aa(rs)'注意看这里,从这里看到,我通过调用dll的aa过程,传入rs对象关闭与释放
但其实只是关闭了rs,没有实际释放
必须还要再次调用
set rs=nothing'再次调用此句才真正释放,问题就在这里,为什么我上调用的aa过程没有释放rs对象呢?
conn.Close
set conn =nothing
End Sub




[ 本帖最后由 寻找 于 2010-4-21 20:24 编辑 ]
2010-04-21 20:17
快速回复:vb的DLL中操作数据库对象的奇怪问题,望高手帮助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020771 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved