FBDataSet (библиотека доступа к данным FireBird/Interbase.)

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

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

Сообщение Attid »

ну раз он замораживается вместе c лазаерем видимо прийдется
RomanS
новенький
Сообщения: 33
Зарегистрирован: 10.12.2007 09:08:24

Сообщение RomanS »

Начал более полно использовать FBDataSet в Delphi7 и обнаружил утечку памяти в модуле mydbunit.pas в процедуре TMyDBCustomDataSet.FreeRecordBuffer:

Код: Выделить всё

procedure TMyDBCustomDataSet.FreeRecordBuffer(var Buffer: PChar);
...
  if RecordIsDinamic then begin
    {release dinamics fields}
    AnsiIdx := 0;
    if RecordDinamics[dfsAnsi] > 0 then begin // <-- вот здесь, ошибка, нужно проверять на ">="
      for AnsiIdx := 0 to RecordDinamics[dfsAnsi] do begin
         PAnsiStrings(@(RecBuf^.Data))[AnsiIdx] := '';
      end;
      AnsiIdx := RecordDinamics[dfsAnsi]; // <-- AnsiIdx нужно ещё увеличить на 1
    end;
    if RecordDinamics[dfsWide] > 0 then begin // <--  и вот здесь ошибка
      for WideIdx := AnsiIdx to AnsiIdx + RecordDinamics[dfsWide] do begin
         PWideStrings(@(RecBuf^.Data))[AnsiIdx] := '';
      end;
    end;
  end;
... 

Утечка проявляется если в SQL запросе используется только одно поле String/WideString
версия FBDataSet из svn
Проверьте, может я что напутал...
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

надо смотреть.
xcod
постоялец
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Сообщение xcod »

Поставил лазарус 0.9.29 SVN 22282 от 26 окт.
UIB из svn и FBDataSet оттуда же.

при вызове SQL редактора и последующем его закрытии(ОК или Отмена) в FBDataSet выходит сообщение об ошибке
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Путь вроде верен. Почему туда инишка не может сохраниться?
xcod
постоялец
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Сообщение xcod »

Путь верен. Почему не может сохранить понять не могу.
правда лазарус на диске D установлен, но думаю это не должно иметь значения
v-t-l
энтузиаст
Сообщения: 744
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

Есть подозрение, что это из-за русских букв в пути к файлу.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

может тампуть в UTF8 получается? надо смотреть. У меня винды особо нет - а уж с русскими логинами вобще...:-(
xcod
постоялец
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Сообщение xcod »

Щас установил лазарь и все остальное там где нерусский логин :D ошибок не возникало и файл fbdatasetoptions.ini создался без проблем
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

xcod
Значит проблема была в UTF8-наименованиях в пути к этому файлу.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

посмотрим
xcod
постоялец
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Сообщение xcod »

обновил FBDataSet до последней ревизии и вдруг куда то пропало свойство SQLScreenCursor :D
и в редакторе SQL на кнопке "Отмена" написано "ОК"
и еще интересует судьба этого поста http://freepascal.ru/forum/viewtopic.php?p=36062#p36062 :D
alexrayne
постоялец
Сообщения: 125
Зарегистрирован: 03.12.2008 15:56:26

Сообщение alexrayne »

Код: Выделить всё

    procedure TMyDBCustomDataSet.FreeRecordBuffer(var Buffer: PChar);
    ...
      if RecordIsDinamic then begin
        {release dinamics fields}
        AnsiIdx := 0;
        if RecordDinamics[dfsAnsi] > 0 then begin // <-- вот здесь, ошибка, нужно проверять на ">="
          for AnsiIdx := 0 to RecordDinamics[dfsAnsi] do begin
             PAnsiStrings(@(RecBuf^.Data))[AnsiIdx] := '';
          end;
          AnsiIdx := RecordDinamics[dfsAnsi]; // <-- AnsiIdx нужно ещё увеличить на 1
        end;
        if RecordDinamics[dfsWide] > 0 then begin // <--  и вот здесь ошибка
          for WideIdx := AnsiIdx to AnsiIdx + RecordDinamics[dfsWide] do begin
             PWideStrings(@(RecBuf^.Data))[AnsiIdx] := '';
          end;
        end;
      end;
    ...


действительно баг. отпатчил бета ветку в репозитарии. беритя.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

alexrayne
Надо было в транк
я их синхронил, перетянул твои изменения в текущий транк.
xcod
Это я с дефайнами баловался - мне нужно было сделать LCL не зависимую компиляцию - а вернуть забыл.
Исправимся.
Можеш сам раскоментировать соответсвующий дефайн в INC файле.
Аватара пользователя
Vesyolyi
новенький
Сообщения: 26
Зарегистрирован: 10.09.2008 12:09:50
Откуда: г. Слободской
Контактная информация:

Сообщение Vesyolyi »

Что-то не понятно, ошибка на последник версиях uib и fbdataset, странно при чем на работе нет ошибки, а на домашнем компе есть вот тут:
procedure TFBCustomDataSet.QuerySelectOnClose(Sender: TObject);
begin
//FQuerySelect.OnClose:=nil;
Active:=false;
end;
пришлось строку FQuerySelect.OnClose:=nil; заремить
выскакивает при закрытии формы с fbdataset.
Так же не решенные ошибки при cacheupdates=true. когда второй раз делаешь ApplyUpdates, не сбрасывается старый буфер...
Ответить