三层结构的简单问题?(100分)

  • 主题发起人 主题发起人 ldsjlzy
  • 开始时间 开始时间
L

ldsjlzy

Unregistered / Unconfirmed
GUEST, unregistred user!
我在中间层定义一个方法,实现对一个表的多条数据的更新。
客户端只要调一次这个方法就可更新这个表的很多记录。
问:这个方法的参数怎么定啊?也就是怎样将客户端想要更新的多条记录的数据
传给中间层,由中间层更新。难道我要在客户端传个variant的数据集上去?这样启不是要
在客户端组织半天的数据集?用什么方法实现一次传一批数据给中间层供中间层处理?
本人初学,请高手指点.
 
解析clientdataset.delta
 
如果多个记录这间没有联系,你可以用variant将ID带过去,然后进行删除。
如果ID之间有联系,你可以建立一个视图。带一个整数过去就行了。
 
To 张辉明:我在客户端更新了几条记录中的几个字段。怎样给中间层这个方法传参数由中间层方法再更新?
To 迷糊:能具体点说怎样解析ClientDataset.delta的方法吗?如果客户端要做太多的解析
工作,我还不如直接用sql更新呢,也不要什么方法了。我想要客户端尽量容易调用这个方法,怎么实现?赐教.
 
使用 ASTA,对于数据更新几乎可以不要写什么代码。我个人认为比 ClientDataSet 要好。
ASTA 可以在 www.playicq.com 上找到。
 
ASTA那东西我相信是好用,但己经用了MIDAS,不能回头了。
 
你们是怎么做的啊?
 
不用解析,直接将客户端的clientdateset.date作为参数传递给服务器端,
在服务器端用clientdateset读出来就行了。
 
To wfzha,也就是说将要更新的记录集作为参数传至服务端,再由服务端读出来处理?
 
直接使用clientdataset,简单明了。
 
To cqfire,如果我直接用ClientDataset,那我中间层的业务逻辑怎么封装。我想在客户端
开发不应该了解太多的业务逻辑吧。
 
有没有什么办法,让客户端传的参数尽量少,就能实现在服务端更新多个表啊?
 
如果你用的MIDAS,客户端使用ClientDataSet进行操作,那么在
ClientDataSet.Delte里就会记录你操作的数据,不过是新增、修改还是删除
你把 作为可变变量传递至服务器(这个时候客户端并不知道什么企业规则吧)
服务器可以把它还原成数据集,这样服务器就知道客户端进行了哪些处理,那么服务器要
处理什么业务逻辑就完全是服务器端的事情了
 
解析clientdataset.delta是比较好的方法。delta是variant类型,可直接赋值。
clientdataset2.data := clientdataset.delta;
在delta里记录了所有修改过的记录的字段的内容,无变动的记录内容不在其中。
在你开始记录更新时使用MergeChangeLog方法清空clientdataset的日志。
然后改数据等操作,再提交服务器。
提交参数类型仍为variant,但数据量已是极少了。
 
在客户端调用clientdataset更新数据时会触发服务端TDataSetProvider的BeforeUpdateRecord事件,BeforeUpdateRecord定义为:
type TBeforeUpdateRecordEvent = procedure(Sender: TObject;
SourceDS: TDataSet;
DeltaDS: TClientDataSet;
UpdateKind: TUpdateKind;
var Applied: Boolean) of object;
property BeforeUpdateRecord: TBeforeUpdateRecordEvent;
其中DeltaDS参数就是由客户端传递过来的被修改的记录,所以可以在TDataSetProvider.BeforeUpdateRecord事件中进行更新各个表。
 
把你在客户端用的clientdataset.data 作为参数传到服务器端,服务器端用一个clientdataset控件处理传过来的参数就行了
服务器端
clientdataset1.data:=value;
for i:0 to clientdataset1.recordcount-1do
begin
在此处理商务规则,如错误,返回错误信息,否则写数据库
......
end;
如果是新数据的话,客户端clientdataset不用连接服务器端,当内存表使用好了
如果是编辑数据,传delta好了
 
同意lightstar
 
多人接受答案了
 
后退
顶部