三层多表更新问题,救命呀,送上200大洋!!(200分)

  • 主题发起人 主题发起人 hscys
  • 开始时间 开始时间

小弟也在开发midas/dcom的程序,雨人兄的想法很好,李维的书中也提到了,但不知
如何具体实现。现在我们的应用服务器上只有远程数据模块这一个对象,如果在应用构建
服务器上构建多对象的应用服务器不知道者么做?
 
同意雨人的意见
 
我想你可以在后台数据库写要用的存储过程,
这样就可以直接传参数给存储过程,
比如你在Insert 销售单据表有一个‘数量’参数
相应的就可以减少库存表里头的库存量,
这样你可以在ClientdataSet.Params里把参数直接传给中间件的TStoredProc空件
也可以直接在TClientDataSet.CommandText里使用'Execute 存储过程名 参数1[,参数2…]
我在写三层时大都把规则尽量的放在数据库端,这样数据库会帮你维护数据的完整性。
 
用COM+
中间层函数为:
BatchCommit(var arySql: OleVariant);
var
i:integer;
begin
//判断参数arySql是否是一维字符串数组
if VarType(arySql)<>(varArray+varOleStr) then
begin
SaveLog('BatchCommite parameter err: not varArray+varString!');
raise Exception.Create('BatchCommite parameter err: not varArray+varString!');
exit;
end;
//开始进行SQL语句批处理
try
for i:=VarArrayLowBound(arySql,1) to VarArrayHighBound(arySql,1)do
with Exec_Querydo
begin
close;
sql.clear;
sql.Add(arySql);
ExecSQL;
close;
end;
SetComplete;
except
on Exceptiondo
begin
SaveLog('BatchCommite Error:');
raise;
SetAbort;
end;
end;
end;
客户端为:
ls_sql[0]:='INSERT INTO .....';
ls_sql[1]:='UPDATE .....';
...appserver.batchcommit(ls_sql);
 
to 雨人
我想知道你的研究成果,这些对象是如何与delphi的三层框架结合的,单独的对象开发就
不要介绍了!
 
你的中间层是否发布在MTS上?
如果是,就应该利用MTS的事务管理功能在com+的相关方法中用SetComplete或SetAbort来提交或终止数据的正式提交,方法见hcm0790的提示或找本李维的书仔细研读以下。
如果不是,你一定是在client端用假三层的概念实现相关的功能,这样的化就需要对连接数据库的相关控件用两层的方法去写相应的事务控制了。
再有,详细看你的Com+的源码了,是不是在你的相关方法的流程中有错误。
建议:找李维的书仔细看以下,所有的东西也就明白了。
 
你把SetAbort写在raise的前面试一试
 
后退
顶部