关闭程序时,出现错误提示“连接无法用于执行此操作。在此上下文中它可能已被关闭或无效。“,打开源程序,运行代码,关闭程序却无此提示,请问是何原因

eisldkw 2018-05-16 11:42:43
一VB6编译生成的EXE文件运行后打开此程序的抄表窗体,而后直接关闭这个抄表窗体,而后再关闭程序时出现如下错误提示:
连接无法用于执行此操作。在此上下文中它可能已被关闭或无效。
如下图所示:



打开此EXE文件的源代码项目,运行源代码,打开程序中的抄表窗体,而后直接关闭这个抄表窗体,而后再关闭程序却没有出现斜体错误提示。

主程序的UNLOAD / QUERYUNLOAD / Terminate 等相关过程均没有,跟踪主程序代码 一直到彻底运行完,也没出现任何错误提示。 但是把此源代码编译生成的EXE程序运行时,不打开抄表窗体(而后关闭此窗体)时,退出程序,无错误提示,但是打开抄表窗体(而后关闭此窗体)时,退出程序,就出现那个错误提示。

之后发现将抄表窗体中load过程中以下代码注释 掉,编译后的程序,再打开抄表窗体(而后关闭此窗体),退出程序,就没有上述的错误提示了,请大神们帮忙分析一下是何原因?

Dim RsCB As New ADODB.Recordset, sql As String
sql = "select 表号,户号,姓名 from chaobiao "
RsCB.Open sql, Conn, adOpenKeyset, adLockReadOnly
Set DataGrid1.DataSource = RsCB

请注意以上代码在源代码运行时,没有出现上图中的错误提示。
...全文
1516 52 打赏 收藏 转发到动态 举报
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2018-05-24
  • 打赏
  • 举报
回复
赵4老师 2018-05-23
  • 打赏
  • 举报
回复
引用 46 楼 Chen8013 的回复:
有源代码,还调试个鬼的“屁代码”啊。
那是因为你没有遇到过VB6语句表达的意思被编译成P代码或本机代码后,意思发生细微变化导致程序运行时发生逻辑错误。 计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
of123 2018-05-23
  • 打赏
  • 举报
回复
引用 46 楼 Chen8013 的回复:
有源代码,还调试个鬼的“屁代码”啊。
Debug 方式运行不能重现他这个故障。
舉杯邀明月 2018-05-23
  • 打赏
  • 举报
回复
反正我的代码都是“调试”没问题,编译后就没问题。 之前曾遇到的是“调试运行”有一个很离谱的问题,但编译后没问题。 当然后来我也找到“离谱”的根源是因“非常规用法”造成, 但确实不能算“错误”,并且编译后确实没有问题。 说它“离谱”,是因为完全没错的地方它提示有错、并且“被提示”的地方跟引发问题的地方半毛钱关系都扯不上。
熊孩子开学喽 2018-05-23
  • 打赏
  • 举报
回复
以前也曾经遇到过鬼问题, 解释运行没问题, 编译成EXE就有问题, 然后编译成P代码也没问题... 过了很长一段时间, 改了一个很小的问题之后才得以解决.
舉杯邀明月 2018-05-22
  • 打赏
  • 举报
回复
有源代码,还调试个鬼的“屁代码”啊。
赵4老师 2018-05-22
  • 打赏
  • 举报
回复
百度搜“调试VB6的P代码或本机代码”
eisldkw 2018-05-22
  • 打赏
  • 举报
回复
引用 43 楼 zhao4zhong1 的回复:
理解讨论之前请先学会如何观察! 计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! 不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!) VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
感谢,但咱们这是VB6的论坛,调试到不了汇编等的层次。还请帮忙再分析一下。
赵4老师 2018-05-21
  • 打赏
  • 举报
回复
理解讨论之前请先学会如何观察! 计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! 不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!) VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
eisldkw 2018-05-21
  • 打赏
  • 举报
回复
引用 8 楼 Chen8013 的回复:
Private Sub Form_Unload(Cancel As Integer)
   ' “抄表”窗体的代码:
   Set DataGrid1.DataSource = Nothing
   ' 后面这两句,如果是这个窗体模块中定义的或者只在这个窗体中用到,就写在这儿
   ' 否则,就写到“主窗体”中去。
   If (Not RsCB Is Nothing) Then Call RsCB.Close
   If (Not conn Is Nothing) Then Call conn.Close
End Sub
非常感谢,试过了,没有作用。请大家多从根源上分析一下原因。谢谢大家。
赵4老师 2018-05-18
  • 打赏
  • 举报
回复
引用 29 楼 Chen8013 的回复:
[quote=引用 27 楼 zhao4zhong1 的回复:] https://bbs.csdn.net/topics/392380199 谁帮我断一下贴?先谢了!
谁叫你乱回复………… [/quote] 有感而发,不吐不快。
舉杯邀明月 2018-05-18
  • 打赏
  • 举报
回复
“意外”又不是经常出现…… 要是你的程序经常“出意外”,恐怕也是程序写得有问题。 很多“收尾工作”并不需要消耗多少精力,程序执行也不会费多少资源。 但你那种“粗暴处理”的思维,往往是“系统(或应用自身)的缓存、垃圾文件”越来越多的原因。
赵4老师 2018-05-18
  • 打赏
  • 举报
回复
我的中心思想就是: 与其把精力浪费在正常退出或各种意外退出时仍能打扫干净战场这种不切实际的活动中, 不如多做不论上次因任何正常或意外、人为或非人为而、在执行到程序流的任何地方退出,都能在当前相关外部条件具备时,尽量快速重启并立即继续原来被打断的工作。
舉杯邀明月 2018-05-18
  • 打赏
  • 举报
回复
引用 27 楼 zhao4zhong1 的回复:
https://bbs.csdn.net/topics/392380199 谁帮我断一下贴?先谢了!
谁叫你乱回复…………
舉杯邀明月 2018-05-18
  • 打赏
  • 举报
回复
我自己写的那个工具,则是只有在“写文件”时才备份(备份已经存在时不会再备份)。 并且: 直接改写(不备份)、还是“备份原文件”,是可以直接选择的。 (就在“保存数据”按钮旁边,直接钩选是否备份)
赵4老师 2018-05-18
  • 打赏
  • 举报
回复
引用 31 楼 zhao4zhong1 的回复:
[quote=引用 29 楼 Chen8013 的回复:] [quote=引用 27 楼 zhao4zhong1 的回复:] https://bbs.csdn.net/topics/392380199 谁帮我断一下贴?先谢了!
谁叫你乱回复………… [/quote] 有感而发,不吐不快。[/quote] 托您大善人的福,我这回没被憋死。
赵4老师 2018-05-18
  • 打赏
  • 举报
回复
https://bbs.csdn.net/topics/392380199 谁帮我断一下贴?先谢了!
舉杯邀明月 2018-05-18
  • 打赏
  • 举报
回复
引用 25 楼 zhao4zhong1 的回复:
[quote=引用 22 楼 Chen8013 的回复:]
然后当整个人类文明殖民到外太空的某个宜居星球后,万事俱备,只欠重新启动的时候,舉杯邀明月因为上次完美退出时备份的数据太大而迟迟不能自动开始新工作;反之赵4老师的程序在启动时不依赖任何之前的数据,立即开始新工作了。 [/quote] 你能“不依赖之前的数据”,凭什么说我一定就依赖之前的数据呢! “完美退出”是自己“把自己使用过的场地收拾、整理,打扫干净”,并不是一定要“备份什么数据”!  相反,我写的程序,是尽量不备份什么的……  就比如近两年我下载这的老外的某类工具,用它打开一个文档,它就立马生成那个文件的备份(拷贝1份副本);  MD!我只是打开看看内容,又没准备做什么修改,备份个毛线啊!!!  就算我“修改”,也许只是看看修改效果,我又不把改动写入文件,备份个毛线啊!!!  就算我要写入文件,也许那个文档我已经有副本的了,备份个毛线啊!!!  就算我要写入文件,并且就算“写”的时候文件意外损坏不能用了,直接删了就是,    那个文件本身就不是“必不可少”的(应用环境就是那样,“没有文件”根本不影响),备份个毛线啊!!! 真是的,一打开就“无条件备份”,真是磁盘寿命无限期吗!!!!
赵4老师 2018-05-18
  • 打赏
  • 举报
回复
引用 22 楼 Chen8013 的回复:
然后当整个人类文明殖民到外太空的某个宜居星球后,万事俱备,只欠重新启动的时候,舉杯邀明月因为上次完美退出时备份的数据太大而迟迟不能自动开始新工作;反之赵4老师的程序在启动时不依赖任何之前的数据,立即开始新工作了。
加载更多回复(32)

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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