请教:如何解决ado引用不能正常关闭的问题?

cnbluesky2000 2002-11-13 02:11:47
请教:如何解决ado引用不能正常关闭的问题?

Private cn As New ADODB.Connection
Private rs As New ADODB.Recordset

Private Sub Command1_Click()
On Error GoTo errorcomm
cn.ConnectionString = ".............."
cn.Open
qqqqq = "select * from ......."
Set rs = cn.Execute(qqqqq, numrecs, 1)
对应代码
rs.Close
cn.Close
Exit Sub
errorcomm:
msgtext2comm = MsgBox("请检查对应的输入项是否正确")
Exit Sub
End Sub
我的目的:当输入项错误时,弹出对话框,提示修改,返回。修改正确后,点击控件后正常运行!
目前结果:当输入项错误时,弹出对话框,提示修改,返回。修改正确后,点击控件后仍然提示错误对话框!我认为是由于rs cn在未关闭情况下再次调用造成的,但这又不可避免,因为这是程序遇到错误时容错程序造成的!!!如何解决?谢谢!


...全文
51 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
litsnake1 2002-11-13
  • 打赏
  • 举报
回复
if not rs is nothing then
是判断rs是否还跟实际对象有关联。
但是你这里不应该这样使用的,你应该判断rs的状态,正确方法是
If rs.State = adStateClosed Then
'表示已经关闭,现在可以使用了
end if
cnbluesky2000 2002-11-13
  • 打赏
  • 举报
回复
是吗?
if not rs is nothing then
msgbox "不为空"
rs.close '如果不为空则关闭 111111
set rs=nothing
end if
对话框弹出,但在 111111处提示错误!operation is not allowed when the object is closed
非常奇怪!
cnbluesky2000 2002-11-13
  • 打赏
  • 举报
回复
非常正确!
litsnake1 2002-11-13
  • 打赏
  • 举报
回复
to 楼主:
其实想你这样嘛!
最好还是不要将rs定义为全局变量,就用局部变量,在你想用的过程中定义
当跳出该过程时,rs会被自动释放,所以不用考虑他是否还开还是闭,而且这比较的安全。
cn全局变量你 不用关它,等到你彻底想退出程序的时候再关闭它好了
cnbluesky2000 2002-11-13
  • 打赏
  • 举报
回复
litsnake1(litsnake)说的很对,定义为局部变量就可以了,可自动关闭!
hsn1982(nan) 的方法并不能判断rs是否为空,但还是谢谢了!
litsnake1(litsnake) 给 50分
hsn1982(nan) 给 50分
cnbluesky2000 2002-11-13
  • 打赏
  • 举报
回复
如果我的cn rs 定义为局部变量,是不是退出时它会自动关闭(没有cn.close rs.close)???
另外,正常情况下rs cn在主程序中关闭,而在出错情况下,在容错程序中应先判断它目前的状态,然后决定关或不关???(if 语句)
cnbluesky2000 2002-11-13
  • 打赏
  • 举报
回复
我的相应代码已调试通过,里面涉及到一个文本框的输入,只能为数字,不能为字母。不输入字母时,一切通过!输入字母就会出错!
我设计是当检测到字母出错时,就运行容错程序errorcomm ,问题是这样rs cn就会没有关闭就推出了,当我改正为数字后,再次运行仍然会出错,因为检测到rs cn为打开状态,故出错,所以我想在容错程序中加入判断rs cn是否为打开状态,如果是就关闭他们!
litsnake1 2002-11-13
  • 打赏
  • 举报
回复
兄弟,这是因为你的rs和cn是全局变量,当你的哪个过程出错了,跳出去的是没有把rs关掉。试试这样:
Private Sub Command1_Click()
On Error GoTo errorcomm
cn.ConnectionString = ".............."
cn.Open
qqqqq = "select * from ......."
Set rs = cn.Execute(qqqqq, numrecs, 1)
对应代码
rs.Close
'cn.close 如果你是全局变量嘛,可以不要关闭,除非你不再使用了,否则在退出程序再关把
Exit Sub
errorcomm:
msgtext2comm = MsgBox("请检查对应的输入项是否正确")
rs.Close '这样就算出错,也能把rs关掉吗?

'Exit Sub 这个明显多余了嘛,可以不要了
End Sub
cnbluesky2000 2002-11-13
  • 打赏
  • 举报
回复
还是不行,我的程序遇到错误后,没有将rs cn 关掉就跳出了,所以再次运行该事件时就提示出错!
采用你的方法后,程序提示:
operation is not allowed when the object is closed
我估计是rs在没有打开的情况下执行了rs.close
宁外,cn是不是也要关闭!
cnbluesky2000 2002-11-13
  • 打赏
  • 举报
回复
另外,如何判断rs是处于打开状态还是关闭状态?
可否如下:
if rs.open then
rs.close
end if
请指教!

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧