最近学三层,有很多问题要请教大家!(100分)

  • 主题发起人 主题发起人 aloelan
  • 开始时间 开始时间
A

aloelan

Unregistered / Unconfirmed
GUEST, unregistred user!
最近学三层,有很多问题要请教大家!
我用DCom,Ado,sql server
1 我用下面的语句咋就出"I/0 6"错误?
while not eofdo
begin
listbox1.items.add(trim(clientdataset1.fields[0].asstring));
next
end;

而我用for循环就没问题?迷惑ing...............
2 怎么处理多人同时修改一条记录的问题?
3 怎么使用事务?
恳请大家赐教!
还有用dcom该注意那些容易出问题的地方?(这个问题问的不大好意思!)
 
1、你的语句是写到客户端的吗?
2、多人同时修改一条记录,可以由客户端用命令来锁定它~~但当一个客户修改数据时,其他的客户端就触发异常。
 
while not clientdataset1.eofdo
begin
listbox1.items.add(trim(clientdataset1.fields[0].asstring));
next;
end;

系统会自己判断的(某个用户在改某条记录,而这条记录被其它用户改了,系统会先找原记录和它比较,如不同,系统会给出提示的);
在三层中,事务用户也不用管,系统会自处理.
可以看看李维的书.
 
[?][?][?][?]
1 是在客护端写的!
2 怎么锁住?
3系统自动处理?
 
回复人: 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上,三层版都不太热哦?
 
后退
顶部