这个问题起码从Delphi XE3开始就存在,一直到目前最新版本都是这样,而且预计还会长期存在下去。导致这个问题的原因是这个组件和DataSetProvider组件的一些变量从AnsiString改成了utf8String, 但又没有改得很完整。对于英文来说,AnsiString和utf8String是一样的,因此对英文没有影响,但对于其他语言来说,AnsiString和utf8String完全不一样,连字节数都不一样,因此对于其他语言会出现问题。
要解决这个问题的方法,需要修改Datasnap.DBClient.pas和Datasnap.Provider.pas这两个单元:
1. 修改Datasnap.DBClient.pas:
把procedure TCustomClientDataSet.AddFieldDesc过程中的
if LName.Length = SizeOf(MIDASNAME) - 1 then //这一行改为下面的一行:
if StrLen(FieldDesc.szName) = SizeOf(MIDASNAME) - 1 then
2. 修改Datasnap.Provider.pas:
把procedure TCustomPacketWriter.AddAttribute过程中的
LValuePtr := M.AsAnsi(string(Value)).ToPointer; //这一行改为下面的一行:
LValuePtr := M.AsUTF8(string(Value)).ToPointer;