не работает GotoBookmark() в Лазаре

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

не работает GotoBookmark() в Лазаре

Сообщение racotr » 13.01.2010 12:32:12

Здравствуйте ещё раз. Кто-нибудь может быть встречался с такой проблемой:

Хочу запомнить запись на которой находился в текущем Query.
В дельфе был метод
Код: Выделить всё
var bm : TBookmark; //переменная указатель на закладку
...
bm := Query1.GetBookmark; //Берём закладку в память
Query1.First; //Делаем разные действия с запросм Query1, например, переходим на 1-ю строку
Query1.GotoBookmark(bm); //возвращаемся на запомненное место
Query1.FreeBookMark(bm); //освобождаем память

В Дельфе 6 это работало на ура. В лазаре есть такая технология, код собирается нормально. Но на строке Query1.GotoBookmark(bm) в процессе работы программы возникает ошибка Project name_project exception class 'External: SIGSEGV'. Что не так с этим классом? И как с этим бороться?

Спасибо за любые советы!
racotr
новенький
 
Сообщения: 14
Зарегистрирован: 19.12.2009 00:32:56
Откуда: Braneapol

Re: не работает GotoBookmark() в Лазаре

Сообщение alexs » 13.01.2010 22:13:20

Проблема в самом Query1 - что используеш?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: не работает GotoBookmark() в Лазаре

Сообщение racotr » 03.02.2010 10:33:39

alexs писал(а):Проблема в самом Query1 - что используеш?



Как понять, что использую? Использую компонент TSQLQuery, если Вы про это.
racotr
новенький
 
Сообщения: 14
Зарегистрирован: 19.12.2009 00:32:56
Откуда: Braneapol

Re: не работает GotoBookmark() в Лазаре

Сообщение WAYFARER » 03.02.2010 21:09:53

У меня все работает. Только что попробовал. Подобную ошибку выдало только когда я попробовал перейти к закладке уже уничтожив её. А попробуйте не уничтожать закладку?
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: не работает GotoBookmark() в Лазаре

Сообщение racotr » 04.02.2010 07:42:06

Очень странно, щас попробовал тот же код - всё работает. Магия какая-то...
racotr
новенький
 
Сообщения: 14
Зарегистрирован: 19.12.2009 00:32:56
Откуда: Braneapol

Re: не работает GotoBookmark() в Лазаре

Сообщение Sharfik » 02.08.2023 02:22:30

Можно я не буду плодить темы?

Есть вот такой код. Используется BufDataSet и RXDBGrid. Для сортировки из Wiki взята функция SortBufDataSet();
Проблема в ошибках на строке bdsInputStream.GotoBookmark(dbBookmark);
Один раз нажимаю, кликаю во все можно и все нормально, в другой - облом падаем. Когда вызывают карточку просмотра записи, и закрываю ее, то обычно валится стабильно.
Но никакой работы с bdsInputStream по изменению там не ведется. Только считывание текущей записи.
Отслеживание приходит на procedure TCustomBufDataset.CurrentRecordToBuffer(Buffer: TRecordBuffer);
Может я не правильно порядок работы команд выставил?
Код: Выделить всё
bIsBookmark:=bdsInputStream.Active;

               if bIsBookmark then
               begin
                 dbBookmark:=bdsInputStream.GetBookmark;
               end;

               bdsInputStream.DisableControls;
               bdsInputStream.Active:=False;
               bdsInputStream.Clear;
               bdsInputStream.ClearIndexes;
               bdsInputStream.IndexName:='';
               try
                  AMS.Position:=0;
                  bdsInputStream.LoadFromStream(AMS);
   
                  if bIsBookmark then
                  begin
                      if bdsInputStream.BookmarkValid(dbBookmark) then
                         bdsInputStream.GotoBookmark(dbBookmark);
                  end;

                  if FSortField<>'' then
                  begin
                      SortBufDataSet(bdsInputStream, FSortField);
                      if FSortDescending then
                      SortBufDataSet(bdsInputStream, FSortField);
                  end;

               finally
                  if bIsBookmark then
                     bdsInputStream.FreeBookmark(dbBookmark);
                  bdsInputStream.EnableControls;
               end;
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

Re: не работает GotoBookmark() в Лазаре

Сообщение jsa » 11.08.2023 10:10:21

Сталкивался с нестабильной работой перехода к закладке.
То работает, то нет. Закономерности не уловил.
Перестал пользоваться и делаю всегда Locate
jsa
постоялец
 
Сообщения: 282
Зарегистрирован: 28.11.2017 13:46:04

Re: не работает GotoBookmark() в Лазаре

Сообщение alexs » 12.08.2023 10:29:35

Закладки используют внутри открытого датасета - после взятия закладки не надо датасет закрывать
Сама закладка - это чёрный ящик. Внутренняя реализация зависит от конкретного набора данных. Но даже если она является элементарно индексом в массиве со строками данных - то после переоткрытия индекс может быть за пределами массива выбранных строк. И даже если кол-во строк совпадёт - не вариант что требуемая строка будет содержать ожидаемые данные.
При необхдимости переоткрытия запроса - правильный метод - поиска строки по ключу
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: не работает GotoBookmark() в Лазаре

Сообщение Sharfik » 12.08.2023 17:58:46

alexs писал(а):Закладки используют внутри открытого датасета - после взятия закладки не надо датасет закрывать
Сама закладка - это чёрный ящик. Внутренняя реализация зависит от конкретного набора данных. Но даже если она является элементарно индексом в массиве со строками данных - то после переоткрытия индекс может быть за пределами массива выбранных строк. И даже если кол-во строк совпадёт - не вариант что требуемая строка будет содержать ожидаемые данные.
При необхдимости переоткрытия запроса - правильный метод - поиска строки по ключу

Во! Спасибо, всеобъмлюще и понятно.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: MailRu[bot] и гости: 2

Рейтинг@Mail.ru