刚开始做三层,把一个c/s结构程序改为DCOM,有几个问题请教:(100分)

  • 主题发起人 主题发起人 duke2000
  • 开始时间 开始时间
D

duke2000

Unregistered / Unconfirmed
GUEST, unregistred user!
1、三层结构中,应用服务器中数据控件同时访问冲突问题……
在应用服务器中定义了一个接口,其中使用数据控件ADOQuery1:
ADOQuery1.Close;
ADOQuery1.SQL.Text:='select * from xxxx';
ADOQuery1.Open;
当有多个客户端同时调用该接口,就会发生ADOQuery1的访问冲突问题,如:不能在打开的数据集执行SQL.Text附值等。
建立远程模块选择的是:
Instancing:Multiple Instance;
Threading Model:Apartment;
为什么没有体现多线程呢?
需要特别设置吗?如何设置??
使用DCOM。
2、三层结构中,从表在客户端体现的是主表的一个DataSetField型的字段,提交时只提交主表,从表数据会自动带入主表跟着提交。在服务端需要先处理从表数据后再写入库中,但如何访问作为主表的一个字段的从表中的数据呢?我想在与主表相连的DataSetPrvider的相关事件中处理,只能在从表数据集的Before Post事件中处理吗?
3、在三层中(DataSnap)系统中,如何用事务来管理提交?
在两层中,我们可以用这个,
try
Data.ADOConnection1.begin
Trans;
Data.ADOclient.UpdateBatch(arcurrent);
Data.ADOconnection1.CommitTrans;
Application.MessageBox('数据已正确存盘!','存盘结果',MB_OK+MB_IconInformation+MB_SystemModal);
except
Data.ADOConnection1.RollbackTrans;
Application.MessageBox('提交存档失败!!','存档结果',MB_OK+MB_Iconstop+MB_SystemModal);
raise;
end;
在三层,我们用clientDataSet来连接数据服务器,请问我们如何做事务管理 ?
 
1、你把adoquery的cursorLocation的属性设为clUseServer看看
 
还是不行啊……
 
你的服务器程序的DCOM配置正确吗?存取控制,激活控制的设置正确吗?
 
应该正确啊,所有客户访问和激活均正常啊。
 
关注1。顶。........
 
1已经解决了:是因为我把数据库联接控件没有放在远程模块中(RDM),原来只有这个模块才是多线程的。
 
后退
顶部