【推荐阅读:远程得到任意远程NT主机帐号List的源】
【扩展信息:GetPartFilter+SumSto】
近日,在用delphi7做unicode的程序时发现了这样一个问题,就是使用tadocommand组件执行sql语句时,如果sql语句中有unicode字符,存储在数据库里会出现乱码,使用ttntadoquery也是一样(使用参数方式不会出现乱码,这里只讨论纯sql的方式).但是tadocommand本身是支持widestring的呀,commandtext属性也是widestring类型的,为什么会出现这个问题呢?我试着改变tadocommand的几个属性值,发现了一个怪现象,只要把paramcheck属性置为false就可以正常的存储unicode字符,而置为true时就出现乱码.为什么会出现这种情况?这个属性看起来与unicode本身没有任何关系,究竟是什么原因导致了乱码的发生呢?我通过研究tadocommand所在的adodb.pas文件,发现了问题的所在,我们看一下bug所在的过程:procedure tadocommand.assigncommandtext(const value: widestring; loading: boolean); procedure initparameters; var i: integer; list: tparameters; nativecommand: string; begin list := tparameters.create(self, tparameter); try nativecommand := list.parsesql(value, true); { preserve existing values } list.assignvalues(parameters); commandobject.commandtext := nativecommand; if not loading and (assigned(connection) or (connectionstring <> )) then begin... 下一页