付费请求解决AdoQuery在C/S下的多表现实,单表更新的问题[300~500元]:
如果把
AdoQuery.LockType 设置成 ltBatchOptimistic;那么可以通过AdoQuery.UpdateBatch 更新数据;
比如:我们可以在DbGrid上任意做添加修改删除动作,一口气处理很多条记录,
最后,用一句AdoQuery.UpdateBatch提交给数据库;非常非常方便;我们不用自己判断哪些记录作了修改,那些纪录是刚添加的,删除了那些纪录,
也不要手工写任何更新的Sql语句;
但是AdoQuery.UpdateBatch 只能处理单表;在多个表关联时,如果我们只想更新其中的一个表,其他表的字段不跟着更新,
那该怎么办?有人提供这样的方法:
AdoQuery.Recordset.Properties.Item['Unique Table'].Value := '主表';但是这个只对删除有用。也有朋友提供: 把不需要更新的字段,修改其属性是ProviderFlags,把不需要提交的列pfInUpdate置为false就可以了;
我尝试了,这个好像只对三层架构有用,在B/S架构下不行;
我一直在网上寻求这个问题的处理方法,可是没有找到答案;我也尝试着改写AdoQuey,让它和BDE的Query一样,也有UpdateObject属性,
可以通过设置UpdateSql的方法来灵活的控制更新;但是没有办法实现类似Query.ApplyUpdates 这样的功能;目前我研究的Ehlib4.0下面有AdoDataDriverEh控件,它能够实现类似BDE下的Query那种方式;
但是它要通过MemTableEh,而且数据量大的时候,数据集打开非常慢;我不想采用。
其实我最简单的想法就是: 1、 能够通过一个属性,把不需要更新的字段不参与更新就可以了;
2、 上面这个方法如果不行,如果能实现BDE下的Query那种方式也行;
如果哪位朋友,帮我解决这个问题,我愿付费请求解决方法;
解决方法,可以改写或继承AdoQuery,或者写一个新的Ado控件等等;费用我考虑在300~500元之间,如果不够,可以再商量,我现在急切的想解决该问题。
联系方法:
msn: [email protected]如果觉得我这个问题描述不够详细,
可以参阅
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3277229
http://bbs.2ccc.com/topic.asp?topicid=234055
如果把
AdoQuery.LockType 设置成 ltBatchOptimistic;那么可以通过AdoQuery.UpdateBatch 更新数据;
比如:我们可以在DbGrid上任意做添加修改删除动作,一口气处理很多条记录,
最后,用一句AdoQuery.UpdateBatch提交给数据库;非常非常方便;我们不用自己判断哪些记录作了修改,那些纪录是刚添加的,删除了那些纪录,
也不要手工写任何更新的Sql语句;
但是AdoQuery.UpdateBatch 只能处理单表;在多个表关联时,如果我们只想更新其中的一个表,其他表的字段不跟着更新,
那该怎么办?有人提供这样的方法:
AdoQuery.Recordset.Properties.Item['Unique Table'].Value := '主表';但是这个只对删除有用。也有朋友提供: 把不需要更新的字段,修改其属性是ProviderFlags,把不需要提交的列pfInUpdate置为false就可以了;
我尝试了,这个好像只对三层架构有用,在B/S架构下不行;
我一直在网上寻求这个问题的处理方法,可是没有找到答案;我也尝试着改写AdoQuey,让它和BDE的Query一样,也有UpdateObject属性,
可以通过设置UpdateSql的方法来灵活的控制更新;但是没有办法实现类似Query.ApplyUpdates 这样的功能;目前我研究的Ehlib4.0下面有AdoDataDriverEh控件,它能够实现类似BDE下的Query那种方式;
但是它要通过MemTableEh,而且数据量大的时候,数据集打开非常慢;我不想采用。
其实我最简单的想法就是: 1、 能够通过一个属性,把不需要更新的字段不参与更新就可以了;
2、 上面这个方法如果不行,如果能实现BDE下的Query那种方式也行;
如果哪位朋友,帮我解决这个问题,我愿付费请求解决方法;
解决方法,可以改写或继承AdoQuery,或者写一个新的Ado控件等等;费用我考虑在300~500元之间,如果不够,可以再商量,我现在急切的想解决该问题。
联系方法:
msn: [email protected]如果觉得我这个问题描述不够详细,
可以参阅
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3277229
http://bbs.2ccc.com/topic.asp?topicid=234055
2、不用多表级联,客户端设计时用lookup或计算字段。
1、AdoQuery.LockType 设置成 ltBatchOptimistic;
2、每次的操作自己转换成SQL语句,后台自行操作
3、不要执行Batch,前台操作的目的只是为了察看方便及同步很简单的道理,譬如select 表一字段,表二字段 from 表一 left join 表二 on ...
如果通过ADO删除,那么Delphi会把2个表中的所有记录全部删除,实际的操作SQL语句应该是
delete 表一 from 表一