开发者社区> 技术小阿哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

"对象打开时,不允许操作"——恼人的bug

简介:
+关注继续查看
一个该死的bug困扰我两天多了,因为需求更改,原有的软件增加报表功能;基于以前写好的存储过程的基础上,利用DELPHI中带的RAVE组件,实现报表打印,在原有的软件基础上,新增加了一个窗体frmPrint。
       窗体内的代码就不多讲述了,关于如何使用带参数的存储过程进行报表打印,我将稍后进行总结归纳。现在讲一下程序的大概思路和出现的恼人问题。
       为了移植方便,程序通过读取ini文件来配置数据库连接,将连接数据库的信息读出后再进行ADOConnection的连接。其它的数据统计和曲线界面都是使用同样的一个DataMConn数据单元窗体中的一个连接,打印也是不例外的,但是,在实现了全部打印功能后,每次关闭窗体,就出现一个警告窗口:""""""""""对象打开时,不允许操作""""""""""。问了人,也搜了资料,大部分人认为是数据库连接的部分操作不当,但是我反复使用了不同的连接方案,还是存在同样问题,后来索性把这个界面去掉,一个部分一个部分地写,竟然发现,是Show & ShowModal的区别,点击"报表打印"按钮时,如果是Show,则出现那个错误!如果是ShowModal,则不会出现错误!
      困扰两天的问题,竟然是这个引起的,我FT无语了!不过,真的在这里抒发一下郁闷心情了!!
      关于对象打开时,不允许操作的其他解决方法:
 ----错误类型:ADODB.Recordset (0x800A0E79)对象打开时,不允许操作。(ASP,SQL SERVER)------- 
/ShowBoard.asp, 第 42 行

  <% 
    Set Conn=Server.CreateObject("ADODB.Connection") 
    Conn.ConnectionString="driver={SQL Server};server=computer;UID=sa;PWD=too.yd;Database=forum" 
 Conn.Open 

    Set rsBoard=Server.CreateObject("ADODB.RecordSet") 
    Set rsArticle=Server.CreateObject("ADODB.RecordSet") 
    Set rsReply=Server.CreateObject("ADODB.RecordSet") 
    Set rsLastPostTime=Server.CreateObject("ADODB.RecordSet") 

    rsBoard.open "select * from Board order by BoardID",Conn,1,1 
  
  
    do while not rsBoard.eof 
    BoardId=rsBoard("BoardId") 
    sql1="select count(ArticleId) from Article where BoardID='"&BoardId&"' " 
    rsArticle.open sql1,Conn,1,1   ‘///////// 
     
    sql2="select count(ReplyId) from Reply where BoardID='"&BoardId&"' "    
    rsReply.open sql2,Conn,1,1  
     
    sql3="select * from Article where BoardId='"&BoardId&"' order by ArticlePostTime desc"    
    rsLastPostTime.open sql3,Conn,1,1  
  %> 
    <td width="100" height="15"> </td> 
    <td width="150"><div align="center"><span class="style1"><%=rsBoard(1)%></span></div></td> 
    <td width="100" class="style1"><div align="center"><%=rsArticle(0)%></div></td> 
    <td width="100" class="style1"><div align="center"><%=rsReply(0)%></div></td> 
    <td width="224" class="style1"><div align="center"> 
 <% 
    If Not rsLastPostTime.Eof Then 
       Response.Write rsReplyLast("ArticlePostTime") 
    Response.Write"/" 
    Response.Write rsReplyLast("ArticlePoster") 
  End if 
 %></div></td> 
  
 <% 
 rsBoard.movenext 
 Loop 
 rsPostLastTime.Close 
 rsReply.Close 
 rsArticle.Close  
 rsBoard.Close 
 %>
<%
 rsBoard.movenext
 Loop

 rsPostLastTime.Close
 rsReply.Close
 rsArticle.Close 
 rsBoard.Close
%>
 中rsPostLastTime.Close rsReply.Close rsArticle.Close 应该在一个循环之后关闭

改为以下就行了
 <%
 rsBoard.movenext
 rsPostLastTime.Close
 rsReply.Close
 rsArticle.Close 
 
 Loop
 rsBoard.Close
%> 
 
一般的这种错误都可以通过得到数据库连接时的状态进行解决,避免出现打开一次再打开的情况出现:比如在打开语句rs.Open   strsql这句前加上句:if   rs.state=adstateopen   then   rs.close,这样,可以先关闭连接,再打开时就不会出现这个错误了。


本文转自 august 51CTO博客,原文链接:http://blog.51cto.com/august/6973,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
用户 'XXX\SERVERNAME$' 登录失败。 原因: 找不到与提供的名称匹配的登录名。 [客户端: ]
原文:用户 'XXX\SERVERNAME$' 登录失败。 原因: 找不到与提供的名称匹配的登录名。 [客户端: ] 一工厂的中控服务器遇到了下面Alert提示,'XXX\SERVERNAME$'  XXX表示对应的域名, SERVERNAME$(脱敏处理,SERVERNAME为具体的服务器名称+$),而且如下所示,客户端是本机,研究了一下,才搞清楚具体原因.       日期/时间:  2017/6/20 12:24:51   说明:   用户 'XXX\SERVERNAME$' 登录失败。
1216 0
JSON API免费接口
各种提供JSON格式数据返回服务网站的API接口 电商接口 京东获取单个商品价格接口: http://p.3.cn/prices/mgets?skuIds=J_商品ID&type=1 用例  ps:商品ID这么获取:http://item.
3937 0
ORA-01002 “fetch out of sequence”关于cursor的一个bug
    今天发现一个PLSQL脚本报ORA-01002和ORA-06512: ERROR at line 1:ORA-01002: fetch out of sequenceORA-06512: at line 8     原来,脚本里包含两个表的两个cursor,然后分别对每个表打开cursor然后对此表做一些dml,每隔若干行rollback(这是因为此PLSQL脚本还在测试阶段,所以需要rollback)。
2886 0
将 SQL Server 实例设置为自动启动(SQL Server 配置管理器)
本主题说明如何使用 SQL Server 配置管理器在 SQL Server 2012 中将 SQL Server 实例设置为自动启动。 在安装过程中,SQL Server 通常配置为自动启动。
996 0
SQL Server数据库获取TEXT字段的内容长度的方法
SQL Server数据库如何获取TEXT字段的内容长度呢?本文我们就来介绍一下SQL Server数据库如何获取TEXT字段的内容长度的方法,是通过DATALENGTH函数来实现的,接下来我们就通过DATALENGTH函数的语法及使用实例来了解一下这部分内容。
916 0
CGRidCtrl控件 学习心得
  图片传不来,需要完整文档,的可以私下找我要哈 目  录 1      引言... 1 1.1       目的... 1 1.2       参考资料.
2131 0
Qt4定时器使用详解
一、使用定时器的timeout()信号   关键代码片段如下:   class QtDemo {     public:          QTimer *timer;  //定时器类指针      public slots:         void t...
793 0
13688
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载