CnPack Forum


 
Subject: CnADOUpdateSQL的BUG
30896186
新警察
Rank: 1



UID 40933
Digest Posts 0
Credits 6
Posts 2
点点分 6
Reading Access 10
Registered 2008-9-12
Status Offline
Post at 2008-9-12 23:39  Profile | Blog | P.M. 
CnADOUpdateSQL的BUG

有空的可以测式一下,因我看了他的原理,是用替换字符的方式,但如一更新的表中,有类似的字段,就会出错,如有两个字段
fsort和fsortabc
这样,后面的字段就不会更新而且会出错
如fsort的值为'123'
fsortabc的值就会变为'123'abc
Top
30896186
新警察
Rank: 1



UID 40933
Digest Posts 0
Credits 6
Posts 2
点点分 6
Reading Access 10
Registered 2008-9-12
Status Offline
Post at 2008-9-12 23:42  Profile | Blog | P.M. 
我用了最土的方法修改了

原: sCommandText := StringReplace(sCommandText, sFieldNameParam, QuotedStr(VarToStr(nValue)), [rfReplaceAll])
改为:
           if bOld then
               sCommandText := StringReplace(sCommandText, sFieldNameParam, QuotedStr(VarToStr(nValue)), [rfReplaceAll])
            else
               begin
                 sCommandText := StringReplace(sCommandText, sFieldNameParam+',', QuotedStr(VarToStr(nValue))+',', [rfReplaceAll]);
                 sCommandText := StringReplace(sCommandText, sFieldNameParam+')', QuotedStr(VarToStr(nValue))+')', [rfReplaceAll]);
              end;

字段列表的字段列表名后面,一般为 ; 号  或  )   号,如不是的话,说明他替换时不是完整的字段名
Top
TinTin
新警察
Rank: 1



UID 40878
Digest Posts 0
Credits 22
Posts 8
点点分 22
Reading Access 10
Registered 2008-9-3
Status Offline
Post at 2008-9-21 13:28  Profile | Blog | P.M. 
稍微简单改一下即可,即StringReplace,原被替换字符串后多带一个空格,新的字符串,QuotedStr()后多一个空格。

所有的TUpdateSQL都有一个通病,即我只修改字段 F1,但在Update中却 set F1,F2,F3所有的字段。
这个源于 TParams的简单赋值方法,却带来以下缺点:1、增加Update字段的危险。2、增加数据库开销,如日志、执行效率。

因此,我们希望,修改那个字段,Update Set 那个字段。
CnADOUpdateSQL还比较好改,因为她基于独立的TADOQuery,而不是拥有UpdateObject的TADOQuery,因此,修改其commandtex,
不影响原有的Params。
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6758
Posts 3555
点点分 6758
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2008-9-23 13:53  Profile | Blog | P.M. 
得请作者小夏来看看。
Top
 




All times are GMT++8, the time now is 2024-4-26 06:33

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

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