• Drowsy (17.09.08 12:36) [0]
    На форме грид, связанный с большой (по количеству записей)
    таблицей.  
    При переоткрытии таблицы грид иногда нормально реагирует на
    "восстановление закладки", а иногда "сбрасывает" текущую запись в начало. Почему?

       with (Datasource.Dataset as tpFIBDataSet) do
       try
         locBookmark := GetBookmark;
         DisableControls;
    ........
    ........
           Close;
    ........
    ........
       finally
         if not Active then Open;
         EnableControls;
         GOTOBookmark (locBookmark);
         FreeBookmark (locBookmark);

       end;
  • Поросенок Винни-Пух © (17.09.08 12:42) [1]
    как то ты очень уж самоуверенно рисуешь код.
    где проверки полученных букмарков на нил и на валид перед их применением?
  • Правильный$Вася (17.09.08 12:43) [2]
    потому что букмарк имеет смысл только в рамках одного открытого датасета
    переоткрытие делает букмарки инвалидными, о чем прямо написано в справке
    фактически букмарк - это адрес, а что расположится по тому адресу после переоткрытия датасета - неизвестно, может, там вообще мусор будет, может - участок других данных
    в самом оптимистичном частном случае - какая-то (не обязательно та жепо номеру) запись из свежеоткрытого датасета
  • Правильный$Вася (17.09.08 12:45) [3]
    переход на запомненную записб лучше делать locate по ключу в датасете
  • Поросенок Винни-Пух © (17.09.08 12:47) [4]
    переоткрытие делает букмарки инвалидными, о чем прямо написано в справке

    Да ладно. Не все так печально.
  • Drowsy (17.09.08 12:48) [5]
    Ага, попробую с locate. Спасибо!
  • Drowsy (17.09.08 12:52) [6]
    Только думаю, что grid всё равно будет "дёргаться", делая locate -ную строку первой видимой в гриде... :(
  • clickmaker © (17.09.08 12:56) [7]
    > [6] Drowsy   (17.09.08 12:52)
    > Только думаю, что grid всё равно будет "дёргаться",

    DataSet.DisableControls / EnableControls
  • Sergey13 © (17.09.08 13:02) [8]
    > [0] Drowsy   (17.09.08 12:36)
    > На форме грид, связанный с большой (по количеству записей) таблицей.  
    Уменьши (по количеству записей) "таблицу".
  • Drowsy (17.09.08 13:08) [9]

    > Уменьши (по количеству записей) "таблицу".

    вери-вери гуд джоке
  • Правильный$Вася (17.09.08 13:12) [10]

    > вери-вери гуд джоке

    это не шутка, это намек на использование запросов, а не пухлых таблиц
    юзеру не нужно больше 200 записей сразу, он не переварит их
  • Ega23 © (17.09.08 13:12) [11]

    > вери-вери гуд джоке


    как-то ты в слове "эдвайс"  аж хрен знает сколько ошибок допустил - "джоке".
  • Ega23 © (17.09.08 13:13) [12]

    > юзеру не нужно больше 200 записей сразу, он не переварит их


    По секрету: юзеру в определённый момент времени редко бывает нужно записей больше, чем в гриде помещается...  :)
  • Правильный$Вася (17.09.08 13:17) [13]

    > По секрету:

    это явно автору, бо я много секретов знаю
  • Drowsy (17.09.08 13:20) [14]

    > это явно автору,

    Точно, мне.
    Буду переваривать тему запроса вместо табла....
  • Drowsy (17.09.08 13:44) [15]
    Вопрос по технике реализации "запроса вместо табла":
    IBQuery -> Select в грид через Create View запихивать?
    Или как-то по другому?
  • Sergey13 © (17.09.08 13:48) [16]
    > [15] Drowsy   (17.09.08 13:44)
    > Или как-то по другому?

    Через книжку желательно.

    > IBQuery
    IBDataSet
  • Правильный$Вася (17.09.08 13:54) [17]

    >  Select в грид через Create View запихивать

    это перпендикулярные вещи
    select можно из таблиц, вьюх, процедур делать, и в разных комбинациях
  • Труп Васи Доброго © (17.09.08 15:23) [18]

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

    фАНТАСТИКА!!! Я вот был уверен что букмарк запоминает номер записи в датасете. И почему то у меня ещё ни разу запомненый до закрытия датасета букмарк не выбросился в мусор после переоткрытия. Если искомой записи нет в датасете, то, текущей становится запись с тем же номером, что был у запомненной.
    А вот локате точно будет "дёргаться"
  • Труп Васи Доброго © (17.09.08 15:27) [19]
    Да, добрый совет - НИКОГДА не обращайся к таблицам напрямую! Через запросы only! И желательно не прямой запрос, а через ХП!
    Не буду обосновывать, просто убеждён что это правильнее, чем давать прямой доступ к таблице.
  • Правильный$Вася (17.09.08 15:38) [20]

    >  Я вот был уверен что букмарк запоминает номер записи в датасете

    type TBookmark = Pointer;
    в общем случае указывает, на что угодно
    в частном для ADO, например, хранит номер записи как элемент рекорда

    > желательно не прямой запрос, а через ХП!

    не буду холиварить, но если автор не знает, что такое запрос, то уж ХП ему рановато объяснять
    тем более, что далеко не во всех СУБД есть
  • Johnmen © (17.09.08 15:41) [21]

    > Труп Васи Доброго ©   (17.09.08 15:23) [18]
    > фАНТАСТИКА!!!

    Реальность.

    > прямой доступ к таблице.

    Это как это?

    > И желательно не прямой запрос, а через ХП!

    Тоже маньяк? :)
  • Ega23 © (17.09.08 15:55) [22]

    > фАНТАСТИКА!!! Я вот был уверен что букмарк запоминает номер
    > записи в датасете. И почему то у меня ещё ни разу запомненый
    > до закрытия датасета букмарк не выбросился в мусор после
    > переоткрытия. Если искомой записи нет в датасете, то, текущей
    > становится запись с тем же номером, что был у запомненной.
    > А вот локате точно будет "дёргаться"


    Тебе просто ОЧЕНЬ сильно повезло.
  • Anatoly Podgoretsky © (17.09.08 16:01) [23]
    Букмарки не стабильны и нормальный программист не будет их использовать никогда, если только не дурак.
  • ПРавильный$Вася (17.09.08 16:03) [24]

    > Anatoly Podgoretsky ©   (17.09.08 16:01) [23]

    нам скальпель не нужен, у нас топор есть
    ?
  • Johnmen © (17.09.08 16:05) [25]

    > Anatoly Podgoretsky ©   (17.09.08 16:01) [23]

    Я думаю, это чересчур категорично.
  • Ega23 © (17.09.08 16:15) [26]

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


    Я использую. Для "пробега" по датасету - самое оно. Для мультиселекта в гриде - тоже. Всё стабильно работает уже х.з. сколько лет.
    Что я делаю не так?
  • Труп Васи Доброго © (17.09.08 16:19) [27]

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

    Чё вы накинулись? Я реально был не в курсе и искренне удивлён таким высказываниям про букмарки. Я их пользовал достаточно редко, но когда пользовал, то ни разу не было сбоя(!!!) (наверное я везунчик) Я даже никогда их на валидность не проверял (теперь стыдно, но, блин, работате же..)
    Обещаю впредь букмарки не использовать!

    > Тоже маньяк? :)

    Нет, не маньяк, но "человек базы" :) И предпочитаю всё программирование БД сводить к триггерам и ХП в самой базе, а на приложение оставляю лишь запросы с параметрами. ОЧЕНЬ удобно.
  • Правильный$Вася (17.09.08 16:29) [28]

    > Обещаю впредь букмарки не использовать!

    впадение в крайности есть признак незрелого ума
    ничего личного
Есть новые Нет новых   [134435   +2][b:0][p:0.001]