наших бьют

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

наших бьют

Сообщение Attid » 05.07.2009 10:48:29

наших бьют

в кратце
В FPC размер TStringField ограничен 8192 символами. Т.е. необходимо такие поля мапить
в MEMO. Для этого необходимо установить TADQuery.FormatOptions.MaxStringSize <= 8192.

В Delphi много лет назад отменили проверку на максимальную длину.
А в FPC осталась, хотя FPC & FCL это что-то посередине между D5 и D6.

А у них в файл DB.PAS никто не лазил с 2001 года. А Delphi VCL за это время ушла далеко.
Вот вам и совместимость.


кто нибуть по FCL знает есть ли\будут движения в этом направлении ?
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: наших бьют

Сообщение скалогрыз » 05.07.2009 12:13:57

может баг-репорт написать?! мол - делфи несовместимость )))

возможность подачи баг-репортов, а так же мануальное их измнение, это основное отличие fpc от делфи :D

насмехаться над fpc будут долго... что самое грустное, насмехаться сильнее всех будут дельфины :(
как говорил ганди (и что у редхата написано в главном офисе):
First they ignore you, then they laugh at you, then they fight you, then you win.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: наших бьют

Сообщение Bupyc » 05.07.2009 13:24:20

скалогрыз писал(а): ... насмехаться сильнее всех будут дельфины :(


Я не смеюсь, я использую :) Думаю, что даже не я один :)
Bupyc
постоялец
 
Сообщения: 137
Зарегистрирован: 29.08.2007 18:22:42

Re: наших бьют

Сообщение Attid » 05.07.2009 13:30:00

скалогрыз писал(а):может баг-репорт написать?! мол - делфи несовместимость )))

как я понял дело тут не в совместимости а в том что без шаманства из БД не вытащишь строку в 32000 символа.

или я не так понял =/ ?
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: наших бьют

Сообщение Max Rusov » 05.07.2009 14:31:27

скалогрыз писал(а):насмехаться сильнее всех будут дельфины :(


Ну, учитывая, во что выродилась Delphi и сколько лет нас обламывают с 64-х разрядной версией - нам сейчас не до смеха.
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: наших бьют

Сообщение Logo » 05.07.2009 15:13:35

Вот оно, коварство:
Код: Выделить всё
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" не меняется, то это не значит, что не вносятся изменения.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: наших бьют

Сообщение Sergei I. Gorelkin » 05.07.2009 15:35:33

В Дельфи все не так просто, там разные типы полей для разных интерфейсов БД. Стандартный TStringField имеет ограничение, но при работе с Interbase вместо него используется TIBStringField, в котором ограничения нет.
Ограничения явно связаны со свойствами используемых БД, они могут быть разными, просто так константой в одном месте его не снимешь.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: наших бьют

Сообщение Logo » 05.07.2009 15:40:20

Sergei I. Gorelkin писал(а): ...просто так константой в одном месте его не снимешь.

Расширить можно, но не снять ограничение.
В FPC, в принципе, тоже для каждой СУБ свои модули.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: наших бьют

Сообщение Climber » 06.07.2009 10:25:40

Attid писал(а):наших бьют

А вы поменьше троллей читайте ;)
sql.ru конечно хороший форум, но потроллить там любят почти все... Лично я например, поковырявшись в lazaruse, на delphi вернуться так и не смог... Да и в свете последних событий вероятность того, что Delphi окончательно загнется, как мне кажется, выше вероятности того, что окончательно загнется fpc...
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru