Board logo

Subject: CnADOUpdateSQL的BUG [Print This Page]

Author: 30896186    Time: 2008-9-12 23:39     Subject: CnADOUpdateSQL的BUG

有空的可以测式一下,因我看了他的原理,是用替换字符的方式,但如一更新的表中,有类似的字段,就会出错,如有两个字段
fsort和fsortabc
这样,后面的字段就不会更新而且会出错
如fsort的值为'123'
fsortabc的值就会变为'123'abc
Author: 30896186    Time: 2008-9-12 23:42     Subject: 我用了最土的方法修改了

原: 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;

字段列表的字段列表名后面,一般为 ; 号  或  )   号,如不是的话,说明他替换时不是完整的字段名
Author: TinTin    Time: 2008-9-21 13:28

稍微简单改一下即可,即StringReplace,原被替换字符串后多带一个空格,新的字符串,QuotedStr()后多一个空格。

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

因此,我们希望,修改那个字段,Update Set 那个字段。
CnADOUpdateSQL还比较好改,因为她基于独立的TADOQuery,而不是拥有UpdateObject的TADOQuery,因此,修改其commandtex,
不影响原有的Params。
Author: Passion    Time: 2008-9-23 13:53

得请作者小夏来看看。




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0