Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1323039127
Мишаня7-8
2011-12-05 02:52
2012.03.18
Как задать кодировку текстовому файлу


2-1323062407
kulakovboris
2011-12-05 09:20
2012.03.18
Утечка памяти на ровном месте


15-1322326868
boriskb
2011-11-26 21:01
2012.03.18
Вакансии


15-1322338591
SQLEX
2011-11-27 00:16
2012.03.18
Как фильм называется про разведку


2-1322683472
Никита1990
2011-12-01 00:04
2012.03.18
Как определить дату БИОС?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский