Конференция "Базы" » Bookmark - странная ошибка
 
  • remolino (28.06.13 18:28) [0]
    D2009
    есть SimpleDataset и TreeView
    добавляю пункты в TreeView через
    AddChildObject( ..., ..., Dataset.GetBookmark() )


    потом в другой процедуре обращаюсь
    if( not Dataset.BookmarkValid( Node.Data ) ) then Exit;
     Dataset.GotoBookmark( Node.Data );


    и меня что на проверке, что на переходе по закладке обматюкивает
    Invalid pointer operation
    что не так, не пойму :(
  • sniknik © (28.06.13 19:29) [1]
    есть 2 типа букмарков описанных в разных модулях, строки и указатель, у тебя где то путаница... найди "свой" и в описании задай тип с указанием модуля откуда тебе нужно.
  • remolino (28.06.13 19:52) [2]
    в том и дело, у меня нет переменных типа букмарк
    а в treeview вообще Data: Pointer, так что при типе "строка" вообще не компилировалось бы
    описанная ошибка - runtime
  • Германн © (28.06.13 20:38) [3]

    > что не так, не пойму

    Имхо, где-то портится память. Кода недостаточно, чтобы ответить точнее.
  • sniknik © (29.06.13 11:25) [4]
    > описанная ошибка - runtime
    а что бывает если при добавлении Dataset пустой? или добавь туда nil для проверки. получишь туже ошибку тогда ищи как может сбиться значение.

    но вообще нужен лог и записать значение при ошибке.
  • sniknik © (29.06.13 11:38) [5]
    > а что бывает если
    +
    добавить пункт с букмарком на запись, а после наложить фильтр скрывающий эту запись? или вообще удалить запись?
    ++
    у тебя делается перекрытие датасета? все букмарки становятся невалидными их нужно "обновлять" это учитывается?
    +++
    чаще лучше/проще использовать значение ключа + локейт вместо букмарка.
  • remolino (30.06.13 13:31) [6]

    > а что бывает если при добавлении Dataset пустой?

    в данном случае он не пустой
    иначе не будет ничего в дерево добавляться, поскольку оно строится из данных датасета

    > наложить фильтр скрывающий эту запись?

    фильтра нет и не предполагается

    > вообще удалить запись?

    записи не удаляются (пока по крайней мере)

    > у тебя делается переокрытие датасета?

    нет

    > все букмарки становятся невалидными их нужно "обновлять" это учитывается?

    я знаю

    > чаще лучше/проще использовать значение ключа + локейт вместо букмарка.

    обычно так и делаю, но тут ключ композитный, поэтому его в Pointer не запихать

    ситуация банальная
    просто как описано в первом посте:
    один датасет, одно дерево, одна процедура заполнения дерева из датасета, одна процедура обработки смены активного пункта дерева - всё!
    в этой последней пытаюсь перейти на нужную запись, чтоб прочитать из БД деталировку, но до чтения дело не доходит
  • remolino (30.06.13 14:26) [7]

    > есть 2 типа букмарков описанных в разных модулях, строки и указатель

    как видно из кода, в этой версии делфи уже всё разнесли, чтоб не путали
    { TDataSet }
     TBookmark = TBytes;
     TBookmarkStr = AnsiString; // deprecated use TBookmark instead.
    ..
       function GetBookmarkStr: TBookmarkStr; virtual; deprecated;
       function GetBookmark: TBookmark; virtual;

  • Германн © (30.06.13 14:50) [8]
    А явное приведение типов не спасет ОРД?
  • remolino (30.06.13 15:01) [9]
    явное приведение типов


    пробовал, фиолетово
    да и компилятор даже предупреждений не выдаёт, хотя в ранних версиях приходилось делать явное приведение
  • sniknik © (01.07.13 00:50) [10]
    > в данном случае он не пустой
    пофигу что "в данном случае", варианты предлагал для поиска глюка. "что будет если..." получишь ту же ошибку будешь ближе к тому что происходит.
  • remolino (02.07.13 15:40) [11]

    > добавь туда nil для проверки

    Access violation at address ... in module midas.dll Read of address 00000010
    ничего похожего на то, что выше
    да и неудивительно
    проверял в отладчике Node.Data - у каждого листа разные, но вполне вразумительные
  • remolino (04.07.13 17:35) [12]
    может, подскажете, где скачать midas.dll 15.0.xxxx
    хочу проверить на другой версии
    вот только нагуглить не могу, везде ссылки на старье какое-то
  • remolino (04.07.13 18:19) [13]
    протрассировал, вываливается на выходе (на end) из методов
    TCustomClientDataSet.BookmarkValid
    TDataSet.GotoBookmark
    при этом все строки методов проходят нормально, без ошибок
    Result в BookmarkValid устанавливается корректно в True

    есть еще мысли?
 
Конференция "Базы" » Bookmark - странная ошибка
Есть новые Нет новых   [134430   +2][b:0][p:0.001]