Форум: "Начинающим";
Текущий архив: 2011.11.06;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.002 c