很多人在用D2009的时候,反应备注字段内容被截断,用纯英文和阿拉伯数字不会,中文和其他语言的混合输入会出现截断内容,但没有乱码。普遍反应是Delphi2009的unicode bug,其实并不是这样。盒子很多用户也反应如此。
我在这个版本测试至少没有所说说的问题(RAD Studio 12.0.3300.19037)我只用到ADO系列的数据控件,BDE,DBExpress是怎么样就不清楚了。说说Delphi2009和D2007版本处理。
Delphi2007把备注字段映射的类型为TMemoField,BLOB类型为ftMemo
Delphi2009把备注字段映射的类型为TWideMemoField,BLOB类型为ftWideMemo
(其实Delphi2007也有这个类型字段,只是IDE自动映射不是它而已)这个时候,如果直接升级老的Delphi2007工程代码到D2009下,备注字段会在保存双字节文字的时候出现不规则的内容截断。
这个时候,你需要删除原来的备注字段设计,从新用IDE映射为TWideMemoField字段,然后就没有问题了。如果你的工程里面没有用代码对备注字段内容进行特别处理,完全可以用文本编辑器(如UltraEdit之类)的直接对
代码文件(pas)和窗体文件进行类型替换,然后Delphi2009直接打开就全部为D2009默认的备注字段类型了(TWideMemoField)1.把所有的工程代码和窗体文件(pas,dfm)里面的(TMemoField)替换为(TWideMemoField)
2.把所有窗体文件(dfm)的ftMemo的字符替换为ftWideMemo(也就是修改字段的BLOB属性)然后用D2009打开编译就没有问题了。
相信这个不是d2009的unicode bug,而是迈向unicode的必要的修改。
其实d2006开始的ado系列的数据控件都已经考虑到unicode准备了,很多属性都有unicode配套的增加了,d2009只是水到渠成而已。希望大家把在迁移到d2009中遇到的问题多贴出来互相交流,大家都清楚了,也许很多bug就不是bug了。