2008-9-12 23:42
30896186
我用了最土的方法修改了
原: 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;
字段列表的字段列表名后面,一般为 ; 号 或 ) 号,如不是的话,说明他替换时不是完整的字段名
2008-9-21 13:28
TinTin
稍微简单改一下即可,即StringReplace,原被替换字符串后多带一个空格,新的字符串,QuotedStr()后多一个空格。
所有的TUpdateSQL都有一个通病,即我只修改字段 F1,但在Update中却 set F1,F2,F3所有的字段。
这个源于 TParams的简单赋值方法,却带来以下缺点:1、增加Update字段的危险。2、增加数据库开销,如日志、执行效率。
因此,我们希望,修改那个字段,Update Set 那个字段。
CnADOUpdateSQL还比较好改,因为她基于独立的TADOQuery,而不是拥有UpdateObject的TADOQuery,因此,修改其commandtex,
不影响原有的Params。