Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.004 c
15-1310284397
@!!ex
2011-07-10 11:53
2011.11.06
Как делать небольшие смс рассылки?


1-1272268693
Дмитрий Белькевич
2010-04-26 11:58
2011.11.06
PolyBezier, проходящий через заданные точки.


8-1217859464
REX
2008-08-04 18:17
2011.11.06
Звук


15-1310456667
SQLEXPRESS
2011-07-12 11:44
2011.11.06
Обработка Dataset в потоке. Клонирование?


15-1310298590
Boxssss
2011-07-10 15:49
2011.11.06
Посоветуйте хостинг




   Наверх