最近csdn上频频出现类似中断commit的问题:
http://topic.csdn.net/u/20090805/10/c9270a8b-2ac1-4beb-b59a-7d89dc6c4e07.html?58492
http://topic.csdn.net/u/20090806/03/5227d73b-4300-4c20-b353-5bbba45a50a6.html?8869
所以决定开始对这问题研究一下。
起初考虑的是用多线程的方法,可是无论怎么写都难以达到理想的效果,所以便开始从datawindow和datastore的事件上开始下手,果然在datawindow的sqlpreview事件上可以做。
commit是最后的提交,程序并不能中断这一操作。然而基本上我们都是先写一个update然后再commit,所以给人感觉提交数据库慢,其实慢在执行update函数上,所以可以中断update来阻止commit。
查看pb帮助,很清楚的写着:
Description
Occurs immediately before a SQL statement is submitted to the DBMS. Methods that trigger DBMS activity are Retrieve, Update, and ReselectRow.
Return value
Set the return code to affect the outcome of the event:
0 Continue processing
1 Stop processing
2 Skip this request and execute the next request
For information on setting the return code in a particular environment, see "About return values for DataWindow events".
于是可以得知datawindow的逐行提交过程可以在这个事件上做中断yield,即可将cpu时间分给执行其他代码。
下面是研究的一点成果:
实例一:这个是如何实现终止update操作
1、sqlpreview事件:
yield()
if ib_stopcommit then return 1 //ib_stopcommit实例变量
2、加一个按钮写上
ib_stopcommit=ture
3、加上dberror事件
return 1
实例二:这个是提交数据库操作中进行进度提示,以及gif动画的运行
1、sqlpreview事件:
w_wait.wf_setcurrentposition(row)//设置等待窗口的滚动条进度
yield()
if ib_stopcommit then return 1//停止
2、提交按钮:
wf_openwait() 打开进度提示窗口
wf_update()datawindow提交
wf_closewait() 关闭进度提示窗口
wf_openwait() 函数:
open(w_wait)
w_wait.wf_setmaxposition(dw_1.rowcount())
wf_update()函数:
if dw_1.update( ) =1 then
if ib_stopcommit then
return 1
end if
commit;
messagebox('系统提示','保存成功')
else
if ib_stopcommit then
return 1
end if
rollback;
messagebox('系统提示','保存失败')
end if
wf_closewait() 函数:
close(w_wait)
代码附件:
http://download.csdn.net/source/1566944
分享到:
相关推荐
dbcommit.pbl,开发版本pb10.5 作者:xys_777@qq.com 时间:2009-8-11 功能:1、实现datawindow提交显示进度条及gif动画 2、实现datawindow提交可以中断 用法:写个 open(w_tb1) 即可 其他版本没测试,应该可以
功能:1、实现datawindow提交显示进度条及gif动画 2、实现datawindow提交可以中断 用法:写个 open(w_tb1) 即可 其他版本没测试,应该可以 备注:资源分稍微高了些的说,程序虽然不麻烦,可是前期研究过程耗费了我...
PB-数据库保存图片并在Datawindow中显示.rar
将datawindow中的数据转为用listview显示
datawindow中CROSSTAB中表的样式
pb中xml导入datawindow源码
文中提供有关DataWindow的案例,在案例体现出DataWindow控件函数及使用技巧。通过学习能快速掌握DataWindow控件
Pb中DataWindow的打印输出 在PowerBuilder 应 用 程 序 的 开 发 中, 各 种 报 表 的 打 印 功 能 是 必 不 可 少的。Power-Builder4.0 提 供 了 大 量 与 打 印 机 进 行 通 信 的 内 部函 数, 用 于 各 种 打 印 ...
pb中DataWindow的打印输出(2) -PowerBuilder 提 供 了 一 组 打 印 控 制 函 数 来 控 制 要 交 给 打 印 机 打 印的 对 象。 第 一 个 函 数P rintOpen() 在 这 章 的 前 面 我 们 已 介 绍过 了, 其 它 还 有: ...
这个东东是什么?... B、DataWindowObject选择*.PBL中数据窗口所使用的名字 4、完成以上步骤后,我们可以把DataWindowControl看作一个DataGridView来使用(可以retrieve 数据表),具体使用就不详细说明了。
pb中用DataWindow实现对多表的修改;pb中用DataWindow实现对多表的修改;pb中用DataWindow实现对多表的修改;pb中用DataWindow实现对多表的修改;pb中用DataWindow实现对多表的修改;pb中用DataWindow实现对多表的修改;pb...
indate(日期时间)字段
包括动态创建数据窗口,datawindow数据转换成excel,word,打印,过滤,排序等
datawindow.net直连测试
使DataWindow列只能追加不能修改,实现列的自动折行,在数据窗口中实现动画等等
从datawindow的下拉列表中弹出treeview选择框
datawindow数据窗体
pb中DataWindow的数据缓冲区 在PowerBuilder 中,DataWindow 是 用 户 前 端 用 来 存 储、 操 纵 数 据 的 对 象。 在每 一 个Data Window 对 象 中 有4 个 二 维 表 作 为 数 据 缓 冲 区, 用来 存 储 查 询 到 的 ...
DataWindow数据窗口资料