付费请求解决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

解决方案 »

  1.   

    顶,触发器,非常好用,就是影响点性能!!!没事的,慢点就慢点!!!!有节zou
      

  2.   

    帮忙顶,我也遇到过这个问题,adoquery中两个表关联,如果UpdateBatch一个表中的字段就会提示:"adoquery缺少更新项",一直不知道怎么解决,顶
      

  3.   

    ADO原生对象的ADORECORDSET,可以设置其他一个属性就可以做到只更新你想更新的表,非常简单,
      

  4.   

    QQ:66296045。加我QQ,我可以帮你解决问题,不收费,互相帮助。注明:delphi
      

  5.   

    1、用触发器(要用替换的那种)
    2、不用多表级联,客户端设计时用lookup或计算字段。
      

  6.   

    这个问题不用那么麻烦,而且Delphi在这种情况下有很多BUG,弄不好会出现意想不到的错误。说白了就是:当多表关联时Delphi的删除功能是错误的!最好的办法
    1、AdoQuery.LockType 设置成 ltBatchOptimistic;
    2、每次的操作自己转换成SQL语句,后台自行操作
    3、不要执行Batch,前台操作的目的只是为了察看方便及同步很简单的道理,譬如select 表一字段,表二字段 from 表一 left join 表二 on ...
    如果通过ADO删除,那么Delphi会把2个表中的所有记录全部删除,实际的操作SQL语句应该是
    delete 表一 from 表一