Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.11.06;
Скачать: CL | DM;

Вниз

GetBookmark, GoToBookmark, FreeBookmark   Найти похожие ветки 

 
.dzmitry   (2011-07-13 11:32) [0]

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


 
Медвежонок Пятачок ©   (2011-07-13 12:15) [1]

перед gotobookmark полезно проверять закладку на нил и на bookmarkvalid


 
.dzmitry   (2011-07-13 12:30) [2]

спасибо за совет, а что co 2 try..finally блоком для gotobookmark?


 
SQLEXPRESS   (2011-07-13 12:36) [3]

а чего не так?

B := ItemsDataSet.GetBookmark(B);
try
  Result := ItemsDataSet.FindKey([Id]);
  if Result then
  begin
    //перед gotobookmark полезно проверять закладку на нил и на bookmarkvalid
    ItemsDataSet.GoToBookmark(B);
  end;
finally
  ItemsDataSet.FreeBookmark(B);
end;


 
Медвежонок Пятачок ©   (2011-07-13 12:44) [4]

Вот эта хрень с try/finally зачем здесь:

try
 Result := ItemsDataSet.FindKey([Id]);
finally
if Result then
  ItemsDataSet.GoToBookmark(B);
end;


ФайндКей вернет либо тру, либо фалс.
Если тру, то курсор сдвинется.
Если не тру, то курсор не сдвинется.
Исключения не генерируется судя по документации.

Зачем здесь try/finally кроме как для мебели?


 
.dzmitry   (2011-07-13 12:51) [5]

все ясно, вопрос можно считать закрытым



Страницы: 1 вся ветка

Текущий архив: 2011.11.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.006 c
3-1264733056
Diplomat
2010-01-29 05:44
2011.11.06
Работа двух пользователей в FireBird


1-1271765959
opolo2000
2010-04-20 16:19
2011.11.06
WorkSheet.Activate в Office2007


15-1310139238
Weei
2011-07-08 19:33
2011.11.06
Ротация бит


15-1309939617
Nikita_novice
2011-07-06 12:06
2011.11.06
Странности IDE Delphi 7


2-1310730839
Anthony
2011-07-15 15:53
2011.11.06
Изменить цвет выделения в TRichEdit