CnPack Forum


 
Subject: cnpark的忠实用户的求助!!
daizhicun
新警察
Rank: 1



UID 2242
Digest Posts 0
Credits 17
Posts 10
点点分 17
Reading Access 10
Registered 2006-6-9
Location 上海
Status Offline
Post at 2006-6-9 18:30  Profile | Site | Blog | P.M.  | QQ | Yahoo!
cnpark的忠实用户的求助!!

我是去年5月份,一个偶然的机会发现了cnpark,用了之后大大的提高了开发效率,
排版比以前方便多了。而且可以通过Shift+F9实现脱离环境运行。而且可以自动的物理文件找出来。自定义过程的注释。。。

一直用到现在,不过我目前还时使用delphi7.

这几年来,有个关于AdoQuery的问题,一直困扰着我,
我知道在这里发这个问题,不太合适,这里高手如云。我非常想专家们帮我看看这个问题:


==========================================

付费请求解决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: sy_dzc@hotmail.com

如果觉得我这个问题描述不够详细,
可以参阅
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3277229
Top
jAmEs_
灌水部部长
Rank: 8Rank: 8



Medal No.1  
UID 886
Digest Posts 0
Credits 1134
Posts 600
点点分 1134
Reading Access 10
Registered 2005-6-5
Location 广东
Status Offline
Post at 2006-6-10 10:11  Profile | Blog | P.M. 
有沒有那麼誇張,這樣的東西竟然說:算了,以后也要转入到do net 下了,Ado的这个致命bug,就将就着浪费几万倍的开发效率吧。  
說實在,這個批量提交功能是不錯,也有用的,但是也不是全部能用,而且我也很少用。而且,這個算是bug嗎?致命?
Top
daizhicun
新警察
Rank: 1



UID 2242
Digest Posts 0
Credits 17
Posts 10
点点分 17
Reading Access 10
Registered 2006-6-9
Location 上海
Status Offline
Post at 2006-6-12 13:38  Profile | Site | Blog | P.M.  | QQ | Yahoo!
用 AdoDataSet 已经没有办法处理 这个问题了,

据说,ClinetDataSet 的功能很强,于是我就尝试做个假三层,
通过ClinetDataSet+DataProvider+AdoDataSet 作为数据集。

但是设置了这个也没有用:
ClientDataSet.FieldByName('不需要更新的字段').ProviderFlags:=[];


郁闷死了!

详细参考了
http://itschool.rjdown.com/artic ... 6030818135480.shtml
这篇文章,甚至直接使用它的代码都不管用。
Top
 




All times are GMT++8, the time now is 2024-11-25 00:43

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 0.009026 second(s), 9 queries , Gzip enabled

Clear Cookies - Contact Us - CnPack Website - Archiver - WAP