Главная страница
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.009 c
15-1310280412
Дмитрий С
2011-07-10 10:46
2011.11.06
Как правильно называются следующие вещи:


2-1311147933
oleg_veles
2011-07-20 11:45
2011.11.06
Работа со строками в Мемо


2-1310662885
Anthony
2011-07-14 21:01
2011.11.06
Простой RTF редактор для Delphi


2-1310474200
SIV5000
2011-07-12 16:36
2011.11.06
JPEG error + on E: Exception


2-1311017214
R_R
2011-07-18 23:26
2011.11.06
Где находится VK_ENTER?