我在学习delphi7+mssql的三层结构 遇到一些自己一直都不懂的问题:在c/s结构中 如何编写多记录的插入 删除?(200)

  • 主题发起人 主题发起人 softlong
  • 开始时间 开始时间
S

softlong

Unregistered / Unconfirmed
GUEST, unregistred user!
我在学习delphi7+mssql的三层结构 遇到一些自己一直都不懂的问题,希望哪位好心大哥帮帮小弟一把,不胜感激问题1: 我在服务器端单独写的接口:procedure TSVD.P_class(const b_id, b_name, b_saction: WideString);实现时只能是单条记录来实现插入和删除 我把客户端把参数传给服务器来实现.那现在如果我想实现客户端实现一次性删除多条记录 或者在客户端插入多条记录 一次性提交到服务器端.这时候我的接口该如何实现呢?因为这样写在客户端只能是一条一条的数据处理 哪位老哥能否发给一份可以一次性多条处理的接口demo? 还有如果我想就这样 在客户端做循环插入或删除.在Delphi的c/s架构上这样做合理吗?问题2:还有个小小的数据库问题一直不明白 如果就像仓库管理一样 多客户端 操作数据库的时候就像单机版一样做吗?比如某一个客户端打开仓库表,数据读取到客户端 这时该客户端出库一些商品.但没有提交到数据库.另外一个客户端也打开仓库表(这时该客户端读取的是没有被前一个客户端修改的数据).该客户端也出库一样的商品.这是前面的客户端提交了数据后后面的客户端也提交了数据.数据库里的数据肯定是不对的. 查了资料,有人说表锁定.或者事务处理.到底怎么做呢?还是MS sql有自己的队列方式不需要考虑呢?这次一定要彻底搞懂啊.省得老是在想.一定要懂.....懂的问题不难 2个问题我都给了100分.我分不多希望多多包涵 我的qq:360934465 希望有位大哥能指点小弟 不胜感激
 
1、删除多条记录时不涉及其它表是不需要一条条处理的,如果涉及其它表则要一条一条处理的。服务器端使用TDataSetProvider一切都能解决了(beforeupdaterecord就是一条条处理)2、启用事务管理比较简单点,好像是begintrans
 
上面的大哥能不能说详细点呢? TDataSetProvider只是提供数据集的接口啊,我的意思是在客户端新增了很多记录 然后一次性提交,但是按照我上面的接口[procedure TSVD.P_class(const b_id, b_name, b_saction: WideString);]只能传入一个具体的ID值记录,这时该怎么处理呢? 如果在客户端选择多条记录 然后全部删除.这时按照我上面的接口又该怎么处理呢?我以前是用上面的接口中的b_saction做为标识,作为删除修改新增的标识的.很死板的.
 
自己定个协议,客户端完成输入1条或者多条后提交,根据协议解包后在操作进数据库
 
把TRemoteDataModule类的AS_ApplyUpdates改写一下,你想怎么处理数据提交就怎么提交数据提交。如果对这个函数不理解,先看看DELPHI本身是怎么执行这个函数的。
 
bbs总算登录上去了 我自己写也写了vb版的自定义协议CS版的 通过TCP/IP协议进行收包发包,和写上位机通讯差不多.但只能是一对一的,vb在这方面确实写的很累很累,所有的数据全部都要从客户端发命令请求,然后服务器做处理后返回给客户端.客户端再保存到临时文件里 再从本地慢慢的处理数据.这样做累都累死了.所有的东西都要自己写的.开发周期和维护性都是让人很头疼.我是想借Delphi的强大处理数据功能 不需要像vb一样.也不需要理解里面的机制.封装的好好的,非常方便的调用. 楼上的兄弟说把as_applyupdates改写一下,能不能贴上来让小弟看看?delphi本身的demo我已经都看过了,没有解决这个具体的问题.谢谢了
 
帮帮小弟啊 一直在等.....
 
一直没懂....自己无力的顶一下...
 
AS_ApplyUpdates中有个参数,叫Delta,你可以在服务端用一个ClientDataSet来装载它,例如 ClientDataSet.Data := Delta; ClientDataSet1.First; While Not ClientDataSet1.Eof do begin Case ClientDataSet1.StatusFilter of usUnmodified : 这条记录是客户端更改记录前的数据,用于定位数据库中的数据的 usModified : 这条记录是客户端更改记录后的数据,用于更新数据库中的数据库 usInserted : 这条记录是客户端新增的记录 usDeleted : 这台记录是客户端删除的记录 End; ClientDataSet1.Next; end;说明:Delta是客户端新增、修改、删除了的记录的数据,可以通过以上方法查看到客户端做了哪些数据变动,只有这些,对你来说还不够,因为你虽然知道数据发生的变更,但你不知道该往哪个数据库中的数据表去更新数据,所以,在客户端,ClientDataSet的BeforeApplyUpdates事件中,你还得把数据表名称写入OwnerData变量中,如下:procedure TForm1.ClientDataSet1BeforeApplyUpdates(Sender: TObject; var OwnerData: OleVariant);begin OwnerData:='数据表名称';end;该参数值会传递给服务端As_ApplyUpdates函数中的OwnerData变量,如果你除了想传递数据表名称给客户端,还想传递其他参数给客户端,请参考VarArray函数的用法。我曾经通过改写As_ApplyUpdate函数的方法,实现了客户端写一个SQL,关联了N个表,然后前台进行编辑,等数据提交的时候,后台可以实现同步更新其中的1个或者几个数据表的功能。
 
做了一下 我还是没有彻底的懂...但还是要谢谢你znxia
 
路过学习中
 
后退
顶部