FBDataSet (библиотека доступа к данным FireBird/Interbase.)
Модератор: Модераторы
Начал более полно использовать FBDataSet в Delphi7 и обнаружил утечку памяти в модуле mydbunit.pas в процедуре TMyDBCustomDataSet.FreeRecordBuffer:
Утечка проявляется если в SQL запросе используется только одно поле String/WideString
версия FBDataSet из svn
Проверьте, может я что напутал...
Код: Выделить всё
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
Проверьте, может я что напутал...
Поставил лазарус 0.9.29 SVN 22282 от 26 окт.
UIB из svn и FBDataSet оттуда же.
при вызове SQL редактора и последующем его закрытии(ОК или Отмена) в FBDataSet выходит сообщение об ошибке
UIB из svn и FBDataSet оттуда же.
при вызове SQL редактора и последующем его закрытии(ОК или Отмена) в FBDataSet выходит сообщение об ошибке
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Путь верен. Почему не может сохранить понять не могу.
правда лазарус на диске D установлен, но думаю это не должно иметь значения
правда лазарус на диске D установлен, но думаю это не должно иметь значения
Есть подозрение, что это из-за русских букв в пути к файлу.
Щас установил лазарь и все остальное там где нерусский логин
ошибок не возникало и файл fbdatasetoptions.ini создался без проблем
xcod
Значит проблема была в UTF8-наименованиях в пути к этому файлу.
Значит проблема была в UTF8-наименованиях в пути к этому файлу.
обновил FBDataSet до последней ревизии и вдруг куда то пропало свойство SQLScreenCursor
и в редакторе SQL на кнопке "Отмена" написано "ОК"
и еще интересует судьба этого поста http://freepascal.ru/forum/viewtopic.php?p=36062#p36062
и в редакторе SQL на кнопке "Отмена" написано "ОК"
и еще интересует судьба этого поста http://freepascal.ru/forum/viewtopic.php?p=36062#p36062
Код: Выделить всё
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
- Откуда: г.Ставрополь
- Контактная информация:
alexrayne
Надо было в транк
я их синхронил, перетянул твои изменения в текущий транк.
xcod
Это я с дефайнами баловался - мне нужно было сделать LCL не зависимую компиляцию - а вернуть забыл.
Исправимся.
Можеш сам раскоментировать соответсвующий дефайн в INC файле.
Надо было в транк
я их синхронил, перетянул твои изменения в текущий транк.
xcod
Это я с дефайнами баловался - мне нужно было сделать LCL не зависимую компиляцию - а вернуть забыл.
Исправимся.
Можеш сам раскоментировать соответсвующий дефайн в INC файле.
- Vesyolyi
- новенький
- Сообщения: 26
- Зарегистрирован: 10.09.2008 12:09:50
- Откуда: г. Слободской
- Контактная информация:
Что-то не понятно, ошибка на последник версиях uib и fbdataset, странно при чем на работе нет ошибки, а на домашнем компе есть вот тут:
procedure TFBCustomDataSet.QuerySelectOnClose(Sender: TObject);
begin
//FQuerySelect.OnClose:=nil;
Active:=false;
end;
пришлось строку FQuerySelect.OnClose:=nil; заремить
выскакивает при закрытии формы с fbdataset.
Так же не решенные ошибки при cacheupdates=true. когда второй раз делаешь ApplyUpdates, не сбрасывается старый буфер...
procedure TFBCustomDataSet.QuerySelectOnClose(Sender: TObject);
begin
//FQuerySelect.OnClose:=nil;
Active:=false;
end;
пришлось строку FQuerySelect.OnClose:=nil; заремить
выскакивает при закрытии формы с fbdataset.
Так же не решенные ошибки при cacheupdates=true. когда второй раз делаешь ApplyUpdates, не сбрасывается старый буфер...
