★ 错误如何避免:Select error: only cancel command is allowed when the rows are pending.★

hiddendragon21cn 2003-05-22 05:16:41
在数据窗口retrieve的过程中出现如下错误:
Select error: only cancel command is allowed when the rows are pending.
估计是在一次SELECT操作中对同一表想执行别的操作引起,但遍查源代码似乎无发现这种可能.因此想问问还有何种情况会造成这种情况的出现,以及如何避免??

现象描述:
在一按钮上有对数据窗口读取数据库的操作,如果按慢了倒无事,但按快了就会偶尔出现上述错误,同样,对一些较慢机型出错概率也较高.

相关源码:

//在按钮clicked事件上的:

this.enabled=false//避免触发两次,先将按钮置为FALSE

dw_1.dataobject="dw_test"
dw_1.settransobject(sqlca)
dw_1.retrieve()
this.enabled=true

基本上就是如此,真是百思不得其解,想来应该是还有些什么别的原因造成的,还请各位知道的指教一二
...全文
1584 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
waterstony 2003-05-26
  • 打赏
  • 举报
回复
是有可能出现这样的错误的。我原来碰到过,在数据窗口的双击事件中,如果快速双击,会出运行错,如果加了一个注释,其余什么都不作,就不会出现这种问题。可能加了注释,pb就产生空函数之类的机制,这也算是个不小的bug吧。
hiddendragon21cn 2003-05-26
  • 打赏
  • 举报
回复
终于找到错误原因了:

在数据窗口的retrieverow事件中有如下的代码

//st_1.text=string(dw_1.rowcount()) //非原来的代码,类似……
//★特别注意,是已经注释了的

因为已经注释过了,所以没有去管它,那曾料想,就是这个已经注释的代码,造成了我描述的问题,在这个事件中的代码一定要删除掉,才不会对数据窗口的读取产生影响
所采用的版本是PB6.5
hiddendragon21cn 2003-05-23
  • 打赏
  • 举报
回复
好的,偶试试,先谢谢!!
waterstony 2003-05-23
  • 打赏
  • 举报
回复
没有必要切换,settransobject是数据窗口控件的方法,不是数据窗口对象的方法,换数据窗口对象不会影响连接。在open中定义吧,真的不骗你。
zyhtz 2003-05-23
  • 打赏
  • 举报
回复
是不是要把上次的事务提交,或回滚了才可以
还有dw_1.dataobject="dw_test1"是不是dw_test1,最好在定义时写成d_test1
joss 2003-05-23
  • 打赏
  • 举报
回复
dw_1.dataobject="dw_test1"//如在属性中定义,此句可省略
dw_1.settransobject(sqlca)
两句移到窗口OPEN事件中

增删改操作后及时提交事务

另外可视数据窗口一般选择在属性中直接定义数据窗口()

liaolwj 2003-05-23
  • 打赏
  • 举报
回复
如果换了dataobject是一定要settransobject(sqlca)的,还有你说的对表进行其他操作是什么,是否会出现表锁定的情况,也就是没有提交数据处理。
coolkenmester 2003-05-23
  • 打赏
  • 举报
回复
这样不行
hiddendragon21cn 2003-05-22
  • 打赏
  • 举报
回复
在按钮的事件里写dw_1.settransobject(sqlca)这句是因为要换数据窗口的dataobject
其实代码里是根据一个CBX的CHECKED来设置更换DATAOBJECT的
如下例所示:
this.enabled=false//避免触发两次,先将按钮置为FALSE
if cbx_1.checked then
dw_1.dataobject="dw_test1"
dw_1.settransobject(sqlca)
dw_1.retrieve()
else
dw_1.dataobject="dw_test2"
dw_1.settransobject(sqlca)
dw_1.retrieve()
end if
this.enabled=true

第二条建议我会试试的,谢谢!!
waterstony 2003-05-22
  • 打赏
  • 举报
回复
另外,屏蔽功能别在click事件中写,在数据窗口的retrievestart中写rb_1.enabled = false
在retrieveend中写rb_1.enable = true。
waterstony 2003-05-22
  • 打赏
  • 举报
回复
dw_1.settransobject(sqlca),这一行在窗口的open事件中写。不然每次查询都要设置一次,不出问题才怪。

611

社区成员

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

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