PB改变数据窗口更新特性的方法
更新时间:2023-05-30 08:06:01 阅读量: 实用文档 文档下载
- pb数据窗口的更新属性推荐度:
- 相关推荐
改变数据窗口更新特性的方法
改变数据窗口更新特性的方法
打开一数据窗口,从Rows菜单中选择的"Update Properties…"系统显示"Specify Update Prorerties"对话框:
A、 如果不允许数据窗口更新数据库,那么就不要选中复选框"Allow Updates",单击"OK"按钮关闭对话框。如果要禁止用户修改数据窗口的某列,那么在数据窗口画笔中将此列的TabOrder值设为0。
B、 如果允许数据窗口更新数据库,选中复选框"Allow Updates"。
C、 在"Table To Update"下拉列表框中选择要更新的表
D、 在"Where Clause For Update/Delete"中选则更新方式。
E、 在"Updatesble Cloumns"通过单击选择可更新的列,被选中的列将加亮显示。
F、 选择了要更新的列后,在"Unique Key Column(s)"列表框中定义唯一键,这个唯一键必须能够在表中唯一的标识一条记录。
G、 在"Key Modification"组框中选择当唯一键列更新时数据行的更新方式。
H、 如果当前表中包括了自动增长序号的列(称做标识
改变数据窗口更新特性的方法
列,并非所有的数据库都具备此特性),那么在"Indentity Column"下拉列表框中指定该列。 I、 单击"OK"关闭对话框。
注意事项:如果在"Indentity Column"下拉列表框中指定某列为标识列,那么就不要把该列选择为可更新列。否则,如果把该列选择为可更新列,那么数据窗口产生的任何更新数据库的Update语句都将失败。
关于"Specify Update Prorerties"对话框中的"Key Modification"组框的详细意义。"Key Modification"组框中两个选项指定当唯一键列被更新时的数据行的更新方式。
A、 选中"Use Delete Then Insert"单选钮,在唯一键列被更新的情况下,PoweBuild将首先删除原来的行,然后使用新的键值插入新行。(这种方法减少了数据库重新组织数据的次数,但也存在一些潜在的问题,当某个表的主键是另一个表的外键并在定义外部键时将删除方式定义同时删除(级联删除)时,应用程序可能并不想使用"Use Delete Then Insert"选项。)
B、 选中"Use Update"单选钮,在唯一键列被更新的情况下,PoweBuild修改行的键值(并非所有的数据库都支持主键更新,也就是说,如果您使用的数据库管理系统不支持主键更新,在这里您就不能选择"Use Update"选项)。这种
改变数据窗口更新特性的方法
方法避免了与外部键相关的级联删除问题。
关于"Specify Update Prorerties"对话框中的"Where Clause For Update/Delete"的三个选项的具体含义:
A、 Key Columns
当选中"Key Columns"单选钮时,数据窗口只使用"Unique Key Columns"列表框中选择主键来构造Where子句,该选项经常在单用户应用程序环境中使用,当PowerBuild生成Update或 Delete语句时,它比较某行键值列的原始值与数据库相应行键值列的值,如果两者相等,则更新操作或删除操作被成功的执行。
B、 Key and Updateable Columns
当选中"Key and Updateable Columns"单选钮时,PowerBuild在创建的Update或Delete语句中将键值列的原始值与可更改列的原始值与数据库的相应值进行比较。当这些值相等时,修改或删除相应的行(即Update或Delete语句成功执行)。
C、 Key and Modified Columns
当选中"Key and Modified Columns"单选钮时,PowerBuild在创建的Update或Delete语句中将键值列的原始值和已修改可更改列的原始值与数据库的相应值进行比较。当这些值相等时,修改或删除相应的行,该选项是对数
改变数据窗口更新特性的方法
据完整性的保护和操作并发性的折中。
查看文章 PowerBuilder程序中的并发控制
2008-11-23 20:32
并发能力是指多用户在同一时间对相同数据同时访问的能力。一般的关系型数据库都具有并发控制的能力,但是这种并发功能也会对数据的一致性带来危险。试想若有两个用户都试图访问某个银行用户的记录并同时要求修改该用户的存款余额时,情况将会怎样呢?我们可以对PowerBuilder中的DataWindow进行设置来进行并发控制。所谓并发控制就是指在用户数据修改的过程中保证该数据不被覆盖或改变的方式,在下面的例子中我们将看到如何设置DataWindow来控制开发访问。
公司的某员工在银行前台取款2,000元,银行出纳查询用户的存款信息显示银行存款余额20,000元;正在这时,另一银行帐户转帐支票支付该帐户5,000元,机器查询也得到当前用户存款20,000元,这时银行的出纳员看到用户存款超过了取款额,就支付了客户2,000元并将用户存款改为18,000元,然后银行的另一名操作员根据支票,将汇入的5,000元加上,把用户的余额改为25,000元,那么数据库管理系统是否可以接受这些修改呢?
在DataWindows的设计中,我们选择菜单RowsUpdate ,会出现Specify Update Characteristics的设置窗口,在这个窗口中我们设置Update语句中Where子句的生成,以此来进行开发控制。在这里有三个选项,我们分别看一看在本例中这三个选项的结果:
(1)Key Columns:生成的Where子句中只比较表中的主键列的值与最初查询时是否相同来确定要修改的记录。在上述的例子中,转帐支票的操作将覆盖出纳员做出的修改,这样银行损失两千元。
(2)Key and Updateable Columns:生成的Where子句比较表中主键列和可修改列的值与最初查询时是否相同。在上例中两次查询出的结果都是有两万余额,当第一个人修改余额时,余额仍是二万元,所以修改成立,而支票转帐操作时余额已不是二万,所以该列不匹配,修改失败。
(3)Key and Modified Columns:Where子句比较主键和将要修改的列,在本例中,结果与Key and Updateable Columns的选择相同,因为余额已改变,不再与最初的查询相同,因此仍然不能修改。
让我们作另外一个假设,我们把银行后台作支票转帐操作改为冻结用户存款,即把状态字段的值改为冻结,而且事件发生的次序如下面例子所述,前台出纳的修改能不能成立呢:
改变数据窗口更新特性的方法
(1).Key Columns:Where子句只比较主键值,显然出纳员的修改是允许的。
(2).Key and Updateable Columns:生成的Where子句包括比较所有可修改的列,因此出纳修改时Statue字段为冻结与出纳查询时的tive不符,修改失败,同时显示错误信息。
(3).Key and Modified Columns:Where子句的比较包括主键和要修改的列,由于本列中修改列仍为20,000元没有变化,所以出纳的修改可以成立。
在本例中,我们可以看到Key and Updateable Columns的选项最严格,可以避免出现状态列发生改变时余额作修改的错误,但是这也会禁止我们作一些本当允许的并发修改,如出纳修改存款余额,而业务员修改用户的联系地址等。因此我们应当根据实际情况,选择适当的Update设置。
根据我们使用数据库的不同,我们还有一些其他的控制并发访问和修改的选择方案,如对数据加锁。锁是一个用户避免其他用户对指定行作修改的操作。在结束一个事务如执行commit,rollback,disconnect等语句时自动将锁释放。如果您使用的DBMS支持锁的操作,在Power-Builder的DataWindow设计时,Select语句可在from子句中加上with holdlock:即在data Window的SQL Window中,在表窗口的标题处点击右鼠标,弹出菜单的最后一个选项即为Holdlock。选择该项,生成的SQL语句将在retrievel()函数执行后将所查询的数据加锁,以避免其他用户的修改访问,直至commit,rollback等事件发生后解锁。这种方式带来的问题是,当用户查询完数据后可能离开计算机长时间不用,这段时间内其他用户均无法修改数据。此外有些DBMS如Sybase等不支持行级锁,也就是说当你对某一行查询时更多的行都被上了锁,这就更增加了并发处理的局限性。另一个值得注意的问题是在多窗口应用中某一个窗口的事务提交将会导致使用一事务中其他数据窗口的查询行解锁,这时修改将可能发生错误。
某些DBMS系统支持一个称作"时间戳(timestamp)"的数据项来控制并发性。每张表中都有一个时间戳的数据列,当Insert语句或Update语句对数据行作修改时该列自动被修改为当前时间。当你要作修改时,where子句可检查时间戳列在查询时和修改时两个值是否相符,以此来确保您做出的修改不会覆盖别人的修改,因此这种确认方式与key and Updateable Columns选项相同。即使两个用户对同一行的不同列作修改,笠桓鲂薷恼咭步 О堋T诔S玫墓叵敌褪 菘庵蠸ybase和Microsoft的SQL Server支持时间戳的使用。而在PowerBuilder中,不管用户后台连接何种数据库,只要表中带有timestamp的列名且数据类型为datetime,PB将自动忽略Update characteristics的选项,而在where子句中生成主键和时间戳列的比较。
如果您所用的数据库不支持时间戳但支持触发器,您也可以在表中增加一列整数型的列。当有对表中某种记录作修改时,该列自动加1。下列使用的是Watcom数据库,对Shipper表增加Updcnt字段并作两个触发器,这样任何用户或进程试图修改某行记录时,该字段均可发生变化。
对INSERT触发器的编写如下:
改变数据窗口更新特性的方法
DROP TRIGGER INS—SHIPPER’
CREATE TRIGGER SHIPPER BEFORE INSERT ON SHIPPER
REFERENCING NEW AS Newvalue
FOR EACH ROW
BEGIN
SET newvalue.UpdCnt=newvalue.UpdCnt+1;
END'
同理可编写UPDATE触发器。
在您的PowerBuilder应用之中,除表的主键外,必须再加上这一列作为检测列加入Update语句中的Where子句中,这样再作Update操作时,后台数据库会比较修改时与用户作Retrieve操作时数据是否相等,以确认是否能作修改。在DataWindows中在Specify Update Characteris-tics的对话框的右下角的
Unique key column(s)中加上Updcnt一项,同时注意where clause中选择Key columns,这样PowerBuilder在构造where子句时就会认为Updcnt亦是表的主键,而成为检测项。
当数据窗口的Update函数被调用后,触发器将修改过记录中的Updcnt列表为新值,为保证下一次修改能够有效,您应当立即作Retrieve()以使DataWindow缓冲区中Updcnt的值与数据库相同。显然修改后立即查询的代价要比其他任何一种并发控制的代价要小得多。
一、引言
对于Client/Server方式下的编程,不可避免地有并发操作处理的问题。为了说明问题,举一个不够恰当的例子:如果有两个用户A和B都试图访问同一员工记录并同时要求修改该员工工资时,会有什么情况发生呢?假设该员工的工资为1000元,两台机器修改记录之前读出用户工资均正确。A用户为此员工加本月奖金200元,查询到原来薪水为1000,加上200后变为1200,而此时B用户在不同的机器上扣除此员工的水电费50元,系统将salary字段置为950,显然这种修改是不能接受的,实际的结果应该是1150元。
改变数据窗口更新特性的方法
DataWindow是PowerBuilder中一个独特的对象,功能强大,是Sybase的专利技术,它可以方便而快速地处理数据。通过数据窗口,我们无需编写复杂的SQL语句,就可以实现对数据库的读写操作。
实际上DataWindow 在更新数据时,会根据用户对 DataWindow 中的数据进行的各种操作自动地转换成 SQL 语句,然后再执行。例如:用户新增了一条记录,也就是脚本执行了InsertRow() 函数,输入数据后保存(调用 Update() 函数),此时 PB会将其自动转换成 SQL 语句,发送到数据库服务器。对于转换后的SQL语句,我们可以在datawindow的sqlpreview事件中,加脚本:
MessageBox('SQL语句',sqlsyntax)
来查看。
这里有一点需要注意,如果数据库连接的binding参数设定
改变数据窗口更新特性的方法
为enable,则sqlsyntax返回将不完整,插入一条记录时sqlsyntax呈如下形式:
INSERT INTO "personnel" ( "id", "name", "birthday", "technical_post",
( ?, ?, ?, ?, ?, ? )
为了正确返回sqlsyntax,需将binding参数设为disabled, 设置方法是在dbprofile对话框中,将transaction标签页的Disable Bind选项勾上,或者是在personnel.ini文件中DbParm改为:
DbParm=Connectstring='DSN=database_server',DisableBind=1
则sqlsyntax完整返回如下:
INSERT INTO "personnel" ( "id", "name", "birthday", "technical_post", "salary", "notes" ) VALUES ( 100, '令狐冲', '1975-05-01', '工程师', 1000, '软件开发' )
"salary", "notes" ) VALUES
改变数据窗口更新特性的方法
三、PowerBuilder中的并发控制
PowerBuilder中可以通过数据窗口的更新属性(Update Properties)来实现并发控制。打开 DataWindow 画笔板,点击 Rows->Update Properties菜单,进入“Specify Updatae Properties”对话框,其中“Where Clause for Update/Delete”组合框中的三个选项就是三种处理数据并发问题的策略。
1、选项“Key Columns”:
这种情况是比较更新前后Table的关键字是否发生了变化,即当前数据库中关键字的实际值和最初查询的值做比较,如果没有改变,则可以更新,反之不能更新。
如用户A将员工号为100的职员的salary字段值改为1200并保存后,B用户也将员工号为100的职员的salary字段值改为950并点击“存盘”按钮,我们可以看到数据窗口sqlpreview事件中的sqlsyntax返回如:
UPDATE "personnel" SET "salary" = 950 WHERE "id" = 100
改变数据窗口更新特性的方法
因为关键字id=100没有发生变化,Where条件成立,更新成功,将A用户的修改覆盖,salary值变为950元,员工损失了200元。显然这样没有达到并发控制的目的,未能保证数据的完整性。
2、选项“Key and Updateable Column”:
这种情况是比较更新前后Table的关键字和可修改(更新)的列值是否发生了变化,如果没有一项发生改变,更新成功;反之,若数据库中当前值中若任一项与数据窗口最初检索出的值不一致,则更新失败。对于此例,因所有字段都是可修改(更新)的,即检测是否有任一字段变化。
同上,当用户A更新完后,B用户点击“存盘”按钮,我们可以看到sqlsyntax返回如:
UPDATE "personnel" SET "salary" = 950 WHERE "id" = 100 AND "name" = '令狐冲' AND "birthday" = '1975-05-01' AND "technical_post" = '工程师' AND "salary" = 1000 AND "notes" = '软件开发'
改变数据窗口更新特性的方法
显然,id字段没有改变,而可修改(更新)列之一salary的值经A用户修改存盘后,已由1000变为了当前的1200,where条件不成立,因此更新失败,并弹出出错信息如下:
Row changed between retrieve and update.
No changes made to database.
UPDATE "personnel" SET "salary" = 950 WHERE "id" = 100 AND "name" = '令狐冲' AND "birthday" = '1975-05-01' AND "technical_post" = '工程师' AND "salary" = 1000 AND "notes" = '软件开发'
正在阅读:
PB改变数据窗口更新特性的方法05-30
关于学生心理素质评语07-30
房企拿地16种模式07-03
2020考研英语翻译常用方法总结02-26
福建农林大学食用菌选修课期末考试材料03-09
RadWare AppDirector CLI配置04-15
财务科长述职报告大全02-25
幼儿园大班学期工作计划报告与幼儿园大班学期教学计划书合集11-29
蛋糕店赚钱吗-嘉华饼屋加盟条件05-25
社区议事会会议记录03-29
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 特性
- 窗口
- 改变
- 更新
- 方法
- 数据
- 原辅料取样标准操作规程
- 最标准的毕业论文格式模板
- 2021届高三生物一轮复习《神经调节复习》练习作业
- 人教部编版五年级上学期语文第单四元第14课《圆明园的毁灭》同步练习(I)卷
- 西工大NOJ100题+解答
- 电源认证基本介绍
- 观风海中心学校学习贵州教师誓词宣誓活动实施方案
- 高考化学一轮(人教版)练习:第九章 第30讲 重要的烃 化石燃料 Word版含解析
- 陈艳红课外阅读指导课
- 试析《边城》中翠翠的爱情悲剧
- 团员自我鉴定范文范例
- 吉林省医疗服务价格管理暂行办法
- 房山住宅项目调研报告9-27
- 2012年考研必看考研英语翻译词组汇总(免费下载)
- LED显示屏扫描方式静态与动态的区别
- (实用)学期个人工作计划范文9篇
- MFC下实现位图的透明色显示
- 论“超越法律”的纠纷与多元纠纷解决机制
- 来京人员信息登记表(正式版)
- 对马克思哲学革命的多重理解及思想意义