Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.03.18;
Скачать: CL | DM;

Вниз

восстановить курсор если найдена запись   Найти похожие ветки 

 
Дмитрий_   (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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.007 c
15-1322045600
aka
2011-11-23 14:53
2012.03.18
Пишу программу.


4-1255090574
DVM
2009-10-09 16:16
2012.03.18
Подскажите функцию Windows 7 и Windows 2008 Server


15-1315555388
Василий Жогарев
2011-09-09 12:03
2012.03.18
Перевод заголовочного файла *.h в подключаемый модуль *.pas


2-1323190986
Zhuck01
2011-12-06 21:03
2012.03.18
как найти символ в строке


15-1322253003
Юрий
2011-11-26 00:30
2012.03.18
С днем рождения ! 26 ноября 2011 суббота