после поиска (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;
|
|