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 编辑 ]