Форум: "Начинающим";
Текущий архив: 2012.03.18;
Скачать: [xml.tar.bz2];
Внизвосстановить курсор если найдена запись Найти похожие ветки
← →
Дмитрий_ (2011-12-07 11:47) [0]помогите привести код в порядок:
function TGroupsController.FindNextGroup: Boolean;
var
Bookmark: TBookmark;
begin
FDataSet.DisableControls;
try
Bookmark := FDataSet.GetBookmark;
try
Result := False;
FDataSet.Next;
while not FDataSet.Eof do
begin
Result := FDataSet.FieldByName(Groups_IdFieldName).AsInteger <> -1;
if Result then
Break
else
FDataSet.Next;
end;
if Result then
FDataSet.GotoBookmark(Bookmark);
finally
FDataSet.FreeBookmark(Bookmark);
end;
finally
FDataSet.EnableControls;
end;
end;
1. Нужно ли передFDataSet.GoToBookmark(Bookmark);
ставить условиеif Result then
- менялся ли курсор?
2. Всиречал варианты кода, гдеFDataSet.GotoBookmark(Bookmark);
находится в блокеfinally
. Нужно ли в моем случае перенести его туда?
3. Нужна ли здесь проверкаFDataSet.BookmarkValid(Bookmark)
?
← →
OW © (2011-12-07 12:04) [1]1. Нужно ли перед FDataSet.GoToBookmark(Bookmark); ставить условие if Result then - менялся ли курсор?
менялся же уже выше
> Result := False;
> FDataSet.Next;
2. Всиречал варианты кода, где FDataSet.GotoBookmark(Bookmark); находится в блоке finally. Нужно ли в моем случае перенести его туда?
прилетит в Groups_IdFieldName строка с именем поля, которого нет - будет исключение.
3. Нужна ли здесь проверка FDataSet.BookmarkValid(Bookmark)?
сложно сказать, тебе виднее.
Сам обычно ставлю. Даже если бд локальная и точно знаю, что юзаю ее монопольно, в одном потоке. В этом случае можно и не ставить, наверное, но на автомате все равно ставлю.
← →
Дмитрий_ (2011-12-07 12:32) [2]спасибо.
в первом коде - с GoToBookmark все ясно. еще хочу уточнить, что нужно восстанавливать курсор после Locate. Даже если при его вызове произойдет ошибка курсор не переместиться, верно? получается GoToBookmark можно не переносить в finally? проверка (if Result) была ли найдена запись лишняя?.
function TGroupsController.Exists(const Id: Integer): Boolean;
var
Bookmark: TBookmark;
begin
DataSet.DisableControls;
try
Bookmark := FDataSet.GetBookmark;
try
Result := DataSet.Locate(Groups_IdFieldName, Id, []);
if Result and (FDataSet.BookmarkValid(Bookmark)) then
FDataSet.GoToBookmark(Bookmark);
finally
FDataSet.FreeBookmark(Bookmark);
end;
finally
DataSet.DisableControls;
end;
end;
← →
OW © (2011-12-07 13:14) [3]ну, вроде, так..
Returns false, indicating that a matching record was not found and the active record was not changed.
function TGroupsController.Exists(const Id: Integer): Boolean;
var
Bookmark: TBookmark;
begin
DataSet.DisableControls;
try
Bookmark := FDataSet.GetBookmark;
try
Result := DataSet.Locate(Groups_IdFieldName, Id, []);
if Result and (FDataSet.BookmarkValid(Bookmark)) then
FDataSet.GoToBookmark(Bookmark);
finally
FDataSet.FreeBookmark(Bookmark);
end;
finally
DataSet.EnabableControls;//
end;
end;
однако, почему бы просто не сделать
function TGroupsController.Exists(const Id: Integer): Boolean;
begin
XX.sql.text := "select 1 from where id=:id ";
XX.parambyname("id").value := Id;
xx.open;
result := not(xx.isempty);
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.03.18;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.003 c