Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > GetBookmark, GoToBookmark, FreeBookmark


Автор: NieL 13.7.2011, 10:31
после поиска (FindKey) в DataSet нужно восстанавливать курсор. много где встречался код такого плана:

Код

function ItemIsFound(Id: Integer): Boolean;
var
  B: Pointer;
begin
  B := ItemsDataSet.GetBookmark(B);
  try
    Result := ItemsDataSet.FindKey([Id]);
  finally
    if Result then
      ItemsDataSet.GoToBookmark(B);
    ItemsDataSet.FreeBookmark(B);
  end;
end;


а что, если при вызове ItemsDataSet.GoToBookmark(B); произойдет ошибка. ItemsDataSet.FreeBookmark(B); не выполнится, возникнет утечка памяти. Будет ли правильным сделать еще один try..finally?

Код

function ItemIsFound(Id: Integer): Boolean;
var
  B: Pointer;
begin
  B := ItemsDataSet.GetBookmark(B);
  try
    try
      Result := ItemsDataSet.FindKey([Id]);
    finally
      if Result then
        ItemsDataSet.GoToBookmark(B);
    end;
  finally
    ItemsDataSet.FreeBookmark(B);
  end;
end;



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)