使用delphi 开发多层应用(九)客户端使用事务更新多个表数据到kbmMW服务器

  上次说明了客户端如何把变化的数据更新到服务器端,但是在实际应用中,往往是要同时更新若干个表,

为了保证逻辑上一致,这些表的操作要么都一次成功,要么全部失败,这就需要使用事务处理。我们今天

就来说一下,怎么在kbmMW中实现事务处理。同时也顺便讲一下kbmMW 里面命名查询(named query)的

使用,首先我们打开服务器端,在数据服务上增加一个TkbmMWIBDACQuery,如图

设置它的connctionpool 为Form1.kbmMWIBDACConnectionPool1

resolver 为kbmMWIBDACResolver1

sql 为select * from BMB

keyfieldsnames  为 BMID

tablename 为 BMB

Published 为True

最后把name 改成BMB. 同时把Form1.kbmMWIBDACConnectionPool1的maxconnections 设为5.

好了,服务器端设置好了,可以编译并运行了。

 

现在打开客户端,增加一个TkbmMWClientQuery,并设置相应的参数

注意其他参数与上一个kbmMWClientQuery 一样,唯一不同的就是在query 里面输入@bmb, 也就是直接调用服务器

端的query,这就是命名查询的使用方法,理论上,为了保证多层系统的可维护性,建议多使用命名查询,减少直接SQL 操作。

为了实现事务操作,我们还需要加一个TkbmMWClientTransactionResolver,

并如图设置相关属性,最后为了说明事务操作,我们在“更新到后台”按钮里面改成以下代码:

    with  kbmMWClientQuery2 do
begin
Open;
edit;
fieldbyname('BMNAME').AsString:='测试部门';
post;
end;

with kbmMWClientQuery1 do
begin
edit;
fieldbyname('XM').AsString:='测试人名';
post;
end;

if kbmMWClientTransactionResolver1.Resolve([kbmMWClientQuery2,kbmMWClientQuery1]) then
begin
showmessage('更新成功');
end
else
showmessage('更新失败');
end;

我们在服务器端监测sql 的执行,如下图

可以清楚的看见两个UPDATE 是在一个事务里面完成的,如果任意一个update 出问题,另外一个会跟着失败,保证了数据的一致性。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值