Вот оно, коварство:
Код: Выделить всё
unit DB;
...
dsMaxStringSize = 8192;
...
TStringFieldBuffer = Array[0..dsMaxStringSize] of Char;
Наверное придется фиксить. У кого какое мнение?
--------------
Если NativeFormat = False то размер должен быть не ограничен. В принципе хорошая идея, если строки малые, то зачем тратить время на динамическое выделение памяти.
Код: Выделить всё
//dataset.inc
procedure TDataSet.SetFieldData(Field: TField; Buffer: Pointer;
NativeFormat: Boolean);
Var
AStatBuffer : Array[0..dsMaxStringSize] of Char;
ADynBuffer : pchar;
begin
if NativeFormat then
SetFieldData(Field, Buffer)
else
begin
if Field.DataSize <= dsMaxStringSize then
begin
DataConvert(Field,Buffer,@AStatBuffer,True);
SetfieldData(Field, @AStatBuffer);
end
else
begin
GetMem(ADynBuffer,Field.DataSize);
try
DataConvert(Field,Buffer,@AStatBuffer,True);
SetfieldData(Field, @AStatBuffer);
finally
FreeMem(ADynBuffer);
end;
end;
end;
end;
WideString по идее должна быть не ограничена, но она у меня на PostgreSQL обрезается.
Код: Выделить всё
procedure TWideStringField.SetAsWideString(const aValue: WideString);
const
NullWideChar : WideChar = #0;
var
Buffer : PWideChar;
begin
if Length(aValue)>0 then
Buffer := PWideChar(@aValue[1])
else
Buffer := @NullWideChar;
SetData(Buffer, False);
end;
Добавлено спустя 12 минут 16 секунд:А у них в файл DB.PAS никто не лазил с 2001 года. А Delphi VCL за это время ушла далеко.
Вот вам и совместимость.
Бред. Довольно часто патчится. Если заголовок "Copyright (c) 1999-2000 by Michael Van Canneyt" не меняется, то это не значит, что не вносятся изменения.