Главная страница
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.005 c
1-1271836929
pasha_golub
2010-04-21 12:02
2011.11.06
Exceptions Type to Ignore не работает


3-1265045910
lamer6666
2010-02-01 20:38
2011.11.06
Транзакция в ZConnection (ZeoS)


3-1265342997
Степан
2010-02-05 07:09
2011.11.06
IBDataset обновляет не все поля


15-1310156995
Юрий
2011-07-09 00:29
2011.11.06
С днем рождения ! 9 июля 2011 суббота


6-1245575935
depode
2009-06-21 13:18
2011.11.06
Программное управление uTorrent ом.