回复人: xiaoqiang123(xiaoqiang) ( ) 信誉:100 2003-11-27 21:53:00 得分:0
1.while not clientdataset1.eofdo
begin
listbox1.items.add(trim(clientdataset1.fields[0].asstring));//看看是不是你的域对否,第一个字段是0,第二个是1。。。
clientdataset1.next
end;
2.在sql 中就加锁,select * from tb for update
会在选中的行上加行级锁
还可以 select * from tb for update with nowait
或者这样:
Sql Server 中利用TIMESTAMP 字段来解决这种问题。
当有任何修改时,TIMESTAMP的值都会改变,这样,当你试图修改别人已经改过的数据时,
WHERE 子句找不到你的TIMESTAMP字段的值,就会抱错,你就知道数据已经被别人改过了。
这是最经典的用法。
如果在DELPHI中,用事务
最后一句:最好用事务!
3。
adoconnection1.begin
trans;
语句处理
if 失败 then
begin
rollback;
end else
commit;
end;
Top
回复人: saien(有问必答) ( ) 信誉:102 2003-11-27 22:15:00 得分:0
答问2.不让同时修改.(用lock)
答问3.
begin
Trans;//开始事务
//被保护的代码,如在执行的过程中出现问题,数据库自动回滚.
CommitTrans;//结束事务
Top
回复人: manfeng() ( ) 信誉:100 2003-11-27 23:31:00 得分:0
用dcom最麻烦就是登录问题,delphi的那个dcomconnection控件并不负责登录到nt域上,不要让那个onlogin事件迷惑,即使在事件里面给出nt的域用户和密码也不能登录到nt域上,所以用在nt服务器上用dcom而客户机又没有登录到域上最好配制成所有用户都能启动并且身份标识用制定用户。
Top
回复人: aloelan() ( ) 信誉:94 2003-11-28 19:44:00 得分:0
谢谢!
我刚学,没试过在三层里用事务,我按自己的理解说说,大家多教教我!
是不是这样用:
server端写个method比如:
AddNew(param:xxxx)
begin
sqlstr:='insert into xxxx value (param)'
adocnn.begin
Trans
try
xxxx(执行sqlstr)
adocnn.commitTrans
except
adocnn.rollback
end;
end;
client端点击增加,调用AddNew?
大家看这样理解对不对!真的想学好三层,希望大家多多赐教!
能帮忙贴段代码学学么?
怎么大富翁和csdn上,三层版都不太热哦?