求在三层中的Client发送参数请求Server更新数据库思想中的一些问题的解决方法.(100分)

  • 主题发起人 主题发起人 yepemig
  • 开始时间 开始时间
Y

yepemig

Unregistered / Unconfirmed
GUEST, unregistred user!
由于上面要求,我刚开始学人写三层,由于初学和技上水平问题,我写的三层非常简单,Server中基本没有什么实质的代码(只有用来显示当前的在线用户的几个函数).所有的数据处理都是在Client(规范控制)和SQL数据库里(真正的数据处理).
而且客户端每加一个数据控制窗体,我就要在Server端对应增加一ADODataset和一个DataSetProvider.单表就要加一双,主从表就要加两双,多重主从表就要加多双.我觉得这样实在好烦啊,突别是修改时.我就想如果可在Server端只放一个或两个ADODataset和DataSetProvider
做成Client端各个ClientDataSet和各个用户通用这一或两个ADODataset和DataSetProvider
就好了,起码这样我Client怎么加ClientDataset,Server中也不用对应的加了.
后来在大富翁中看到各位DFW对三层的讨论,DFW们论得好深入好广,我水平低看到头晕,甚至对业务规则的理解都有点晕了.
但DFW们说Client发送参数请求Server更新数据库(SQL语句全写在Server中)这点我明,但这样的话我又有一个问题了:如果在主从表或多重主从表的情况下(我的理解是主从表是分别独立传参数请求更新的),如果其中主表更新成功从表更新失败或从表成功主表败,这样的话失败的表当然可以作取消操作,因为是关联的主从表 成功的表也要一起作取消操作的,但成功的表不是已经成功写入数据库了吗,如何做到取消它呢??????
是不是我的理解不对呢,我还是晕ing....
求DFW们帮帮我 理清思路吧.谢谢!!!!!
 
ASTA 3层技术 的方案符合你的要求 你自己找来看看
 
谢谢,早就有看了.但想在自已的系统的基础上改进而已
 
建议先看一些相关的书籍。
 
帮顶!
http://www.source520.com
站长开发推广同盟 站长朋友的终极驿站
同时拥有海量源码电子经典书籍下载
http://www.source520.com/search/search.asp
"编程.站长"论坛搜索引擎-----为中国站长注入动力!
 
你说的是事务问题!
你可以看provider.pas 中的源代码了。
function TDataSetProvider.InternalApplyUpdates(const Delta: OleVariant;
MaxErrors: Integer;
out ErrorCount: Integer): OleVariant;
begin
CheckDataSet;
FTransactionStarted := not IProviderSupport(DataSet).PSInTransaction;
if FTransactionStarted then
IProviderSupport(DataSet).PSStartTransaction;
try
CheckResolver;
Resolver.FUpdateTree.InitData(DataSet);
try
Result := inherited InternalApplyUpdates(Delta, MaxErrors, ErrorCount);
finally
Resolver.FUpdateTree.InitData(nil);
end;
finally
if FTransactionStarted then
IProviderSupport(DataSet).PSEndTransaction((ErrorCount <= MaxErrors) or (MaxErrors = -1));
end;
end;
代码已帮你实现的事务的调用了。
 
期实我不追求是否要用发参数请求Server端去调用SQL语句去处理数据库的功能.这只是我对DFW们的讨论的一些疑或.
我现在只想做到能使一个(单表)或几个(多层的主从表)AdoDataSet+AdoProvider向Client系统中的各个数据表(有的是单表,有的是多层主从表)通用.
也即是Client中的各单表都通用一个AdoDataSet+AdoProvider,各主从表都通用另一对AdoDataSet+AdoProvider ......以此类推.... ,这样的模式.
 
我在大富翁网内查到的资料是说
第一个连接通过通ADOProvider打开一个查询,并修改(未保存)
第二个连接此时通过同一个ADOProvider打开另一个查询(可能是对不同的表),并修改.
这时无论第二个连接是否保存.第一个的保存一定是出错的(因为ADOProvider找不回第一个连接的查询)
即是说ADOProvider始终是对应于最后一个连接的.
我要实现上面的功能就必须解决这个问题.
 
你最后说的问题只要用事务就可以解决。
 
帮顶!
╭=========================================╮
80G海量源代码,控件,书籍全免费狂下不停!
http://www.source520.com

╰=========================================╯
 
看这里
http://www.delphibbs.com/keylife/iblog_show.asp?xid=4771
 
多人接受答案了。
 
后退
顶部