Pb的并发控制
来源:互联网 发布:中国十大游戏公司 知乎 编辑:程序博客网 时间:2024/06/16 20:03
PowerBuilder中可以通过数据窗口的更新属性(Update Properties)来实现并发控制。
并发控制主要通过 where Clause for Update/Delete 的三个选项来控制:
(1)选项“Key Columns”:
这种情况是比较更新前后Table的关键字是否发生了变化,即当前数据库中关键字的实际值和最初查询的值做比较,如果没有改变,则可以更新,反之不能更新。
这是最宽泛的并发控制,可以说基本是不控制,所有信息项允许随便改,会出现更新丢失的问题:
例如操作员A和操作员B同时打开了一条记录,A先修改了信息项A,保存,然后B又修改了信息项A,保存,这样,A修改的信息将丢失。
该选项一般在没有并发的一些功能中使用,例如编码维护呀之类的。
(2)选项“Key and Updateable Column”;
这种情况是并发控制最严的情况,把所有允许修改的信息项都增加在where的条件中,如果发现一个字段与更新前不符,将并弹出出错信息如下:
(1)选项“Key Columns”:
这种情况是比较更新前后Table的关键字是否发生了变化,即当前数据库中关键字的实际值和最初查询的值做比较,如果没有改变,则可以更新,反之不能更新。
这是最宽泛的并发控制,可以说基本是不控制,所有信息项允许随便改,会出现更新丢失的问题:
例如操作员A和操作员B同时打开了一条记录,A先修改了信息项A,保存,然后B又修改了信息项A,保存,这样,A修改的信息将丢失。
该选项一般在没有并发的一些功能中使用,例如编码维护呀之类的。
(2)选项“Key and Updateable Column”;
这种情况是并发控制最严的情况,把所有允许修改的信息项都增加在where的条件中,如果发现一个字段与更新前不符,将并弹出出错信息如下:
Row changed between retrieve and update.
No changes made to database.
这种模式下,保证了并发的安全性,同时也限制了一些本应该允许的并发,可以根据情况来选择使用。该选项是DW默认的更新模式。
举例说明:
操作员A和操作员B同时打开了一条记录,A先修改了信息项A,保存,然后B又修改了信息项B,保存,这样,操作员A的数据被保存,操作员B的更改将失败;
操作员A和操作员B同时打开了一条记录,A先修改了信息项A,保存,然后B又修改了信息项A,保存,这样,操作员A的保存会被保存,操作员B的保存同样会失败。
(3)选项“Key and Modified Columns”;
这种是并发控制较合适的模式,只把发生变化的信息项,加到where的条件判断中。既防止了更新丢失又允许了一定的并发。
举例说明:
操作员A和操作员B同时打开了一条记录,A先修改了信息项A,保存,然后B又修改了信息项B,保存,这样,操作员A和操作员B的更改都会保存;
操作员A和操作员B同时打开了一条记录,A先修改了信息项A,保存,然后B又修改了信息项A,保存,这样,操作员A的保存会被保存,操作员B的保存不会被保存。
这种模式可以广泛的使用。
(4)使用SQL语句的情况
如果是使用SQL语句的话,就要使用pb的事务处理,这样就能确保你的修改是完整,而且不被别人干扰。
举例说明:将表table_test的dbid=1的记录的num1字段的值更改为2000
这种模式下,保证了并发的安全性,同时也限制了一些本应该允许的并发,可以根据情况来选择使用。该选项是DW默认的更新模式。
举例说明:
操作员A和操作员B同时打开了一条记录,A先修改了信息项A,保存,然后B又修改了信息项B,保存,这样,操作员A的数据被保存,操作员B的更改将失败;
操作员A和操作员B同时打开了一条记录,A先修改了信息项A,保存,然后B又修改了信息项A,保存,这样,操作员A的保存会被保存,操作员B的保存同样会失败。
(3)选项“Key and Modified Columns”;
这种是并发控制较合适的模式,只把发生变化的信息项,加到where的条件判断中。既防止了更新丢失又允许了一定的并发。
举例说明:
操作员A和操作员B同时打开了一条记录,A先修改了信息项A,保存,然后B又修改了信息项B,保存,这样,操作员A和操作员B的更改都会保存;
操作员A和操作员B同时打开了一条记录,A先修改了信息项A,保存,然后B又修改了信息项A,保存,这样,操作员A的保存会被保存,操作员B的保存不会被保存。
这种模式可以广泛的使用。
(4)使用SQL语句的情况
如果是使用SQL语句的话,就要使用pb的事务处理,这样就能确保你的修改是完整,而且不被别人干扰。
举例说明:将表table_test的dbid=1的记录的num1字段的值更改为2000
sqlca.autocommit=false //一定要设置为不自动提交 string ls_errdec lc_new = 2000 dec lc_old select num1 into :lc_old from table_test where dbid=1; //如果有必要查询当前值的话. if sqlca.sqlcode <0 then ls_err=sqlca.sqlerrtext //先读错误信息,然后立即ROLLBACK再提示,以免提示时用户不确定,表还在锁定中 rollback; //立即回滚,以免其它用户等待. messagebox("提示","数据库发生以下错误:~n"+ls_err) return end ifupdate num1=:lc_new from table_test where dbid=1 and num1=:lc_old; if sqlca.sqlcode <0 then ls_err=sqlca.sqlerrtext //先读错误信息,然后立即ROLLBACK再提示,以免提示时用户不确定,表还在锁定中 rollback; //立即回滚,以免其它用户等待. messagebox("提示","更新数据时发生以下错误:~n"+ls_err) return end ifcommit using sqlca;
这样就可以了,你在更新时,事务会锁定其它的操作.
结论:
从上文我们可以得出如下结论:
结论:
从上文我们可以得出如下结论:
(1)“Key Columns”选项在控制数据完整性方面最弱,它所允许的并发操作是最多的,所禁止的并发操作发生的可能性非常小,只有当主键被更改后才起并发控制作用,当一条记录的关键字改变了才进行控制,这显然没有多大意义。实际上这种方法一般只在单机版的应用程序中使用,而在Client/Server模式中是很少使用的。
(2)“Key and Updateable Columns”的是PB的默认选项,控制最为严格,可以实现最安全的并发控制,充分保证数据的完整性,但它也会禁止我们做一些本当允许的并发修改(如上面所说的第二例),是并发能力最差的方法。
(3)“Key and Modified Columns”选项可以说是前两者的折衷,在控制数据完整性和严格性方面比第一项强,比第二项弱,在允许的并发操作数量方面比第一项少,比第二项多。
(4)如果使用Sql,我们可以借鉴pb的DW控制机制,使用事务,并且把修改的项目加到where子句中,控制并发。
(4)如果使用Sql,我们可以借鉴pb的DW控制机制,使用事务,并且把修改的项目加到where子句中,控制并发。
至于在程序中选取哪一种控制比较合适,我们应该根据应用的具体情况来选择。
0 0
- Pb的并发控制
- PB 并发控制
- pb中如何控制并发和控制死锁
- 控制pb鼠标的移动
- 在PB中控制Word的页边距
- pb OLE控制EXCEL的全面认识
- PB OLE控制EXCEL的全面认识
- PB权限控制的完整方案
- PB权限控制的完整方案
- PB权限控制的完整方案
- PB 基本的流程控制语句
- PB权限控制的完整方案
- 控制数据库的并发
- PowerBuilder的并发控制
- PostgreSQL的并发控制
- PowerBuilder的并发控制
- 并发控制的类型
- 事务的并发控制
- IT时代的变革----AIR时代
- python进阶学习笔记(一)——高阶函数
- iOS-判断输入的网址是http还是https,判断网址是否可用
- 使用 wordcloud, jieba, PIL, matplotlib, numpy 进行分词,统计词频,并绘制词云的一次尝试
- discuz宽版解决思路
- Pb的并发控制
- 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方案
- linux下的chgrp、chown和chmod
- SSM框架——实现分页和搜索分页
- centos 安装scikitlearn
- python的位置参数、默认参数、关键字参数、可变参数区别
- Java Servlet 实践篇
- AndroidStudio问题Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Request解决方法
- 【身体检查】20170406