Но Александр Сальников на
вашу проблему натолкнулся и разобрался. Смысл в том что борланды чего-то там
переписали в TWideStringField, вследствие чего плюсовая поддержка
отвалилась. Для D2006 решение вроде бы такое:
переписать метод
procedure TFIBCustomDataSet.DataConvert(Field: TField; Source, Dest:
Pointer; ToNative: Boolean);
var
s : string;
begin
if not (Field is TWideStringField) then
inherited
else
begin
if Database.NeedUnicodeFieldsTranslation then
begin
if ToNative then
begin
// FillChar(Dest^,Field.DataSize,0); // думаю это делать не
обязательно
s := UTF8Encode(pWideChar(Source));
Move( s[1], Dest^, (Length(s)+1)*SizeOf( Char));
end
else begin
s := UTF8Decode( pChar(Source));
Move(WideString(s)[1], Dest^, (Length(s)+1)*SizeOf(WideChar));
end;
end
else
begin
if ToNative then
begin
// FillChar(Dest^,Field.DataSize,0); // думаю это делать не
обязательно
s := pWideChar(Source);
Move( s[1], Dest^, (Length(s)+1)*SizeOf( Char));
end else
begin
s := pChar(Source);
Move(WideString(s)[1], Dest^, (Length(s)+1)*SizeOf(WideChar));
end;
end;
end;
end;
Насколько сие помогает ситуации, и насколько оно корректно работает под
Д2006 сам проверить пока не могу.
Комментарии
Но Александр Сальников на
вашу проблему натолкнулся и разобрался. Смысл в том что борланды чего-то там
переписали в TWideStringField, вследствие чего плюсовая поддержка
отвалилась. Для D2006 решение вроде бы такое:
переписать метод
procedure TFIBCustomDataSet.DataConvert(Field: TField; Source, Dest:
Pointer; ToNative: Boolean);
var
s : string;
begin
if not (Field is TWideStringField) then
inherited
else
begin
if Database.NeedUnicodeFieldsTranslation then
begin
if ToNative then
begin
// FillChar(Dest^,Field.DataSize,0); // думаю это делать не
обязательно
s := UTF8Encode(pWideChar(Source));
Move( s[1], Dest^, (Length(s)+1)*SizeOf( Char));
end
else begin
s := UTF8Decode( pChar(Source));
Move(WideString(s)[1], Dest^, (Length(s)+1)*SizeOf(WideChar));
end;
end
else
begin
if ToNative then
begin
// FillChar(Dest^,Field.DataSize,0); // думаю это делать не
обязательно
s := pWideChar(Source);
Move( s[1], Dest^, (Length(s)+1)*SizeOf( Char));
end else
begin
s := pChar(Source);
Move(WideString(s)[1], Dest^, (Length(s)+1)*SizeOf(WideChar));
end;
end;
end;
end;
Насколько сие помогает ситуации, и насколько оно корректно работает под
Д2006 сам проверить пока не могу.
Когда планируется поддержка???
FR3 с D2006 работает.