-
На форме грид, связанный с большой (по количеству записей)
таблицей.
При переоткрытии таблицы грид иногда нормально реагирует на
"восстановление закладки", а иногда "сбрасывает" текущую запись в начало. Почему?
with (Datasource.Dataset as tpFIBDataSet) do
try
locBookmark := GetBookmark;
DisableControls;
........
........
Close;
........
........
finally
if not Active then Open;
EnableControls;
GOTOBookmark (locBookmark);
FreeBookmark (locBookmark);
end;
-
как то ты очень уж самоуверенно рисуешь код.
где проверки полученных букмарков на нил и на валид перед их применением?
-
потому что букмарк имеет смысл только в рамках одного открытого датасета
переоткрытие делает букмарки инвалидными, о чем прямо написано в справке
фактически букмарк - это адрес, а что расположится по тому адресу после переоткрытия датасета - неизвестно, может, там вообще мусор будет, может - участок других данных
в самом оптимистичном частном случае - какая-то (не обязательно та жепо номеру) запись из свежеоткрытого датасета
-
переход на запомненную записб лучше делать locate по ключу в датасете
-
переоткрытие делает букмарки инвалидными, о чем прямо написано в справке
Да ладно. Не все так печально.
-
Ага, попробую с locate. Спасибо!
-
Только думаю, что grid всё равно будет "дёргаться", делая locate -ную строку первой видимой в гриде... :(
-
> [6] Drowsy (17.09.08 12:52)
> Только думаю, что grid всё равно будет "дёргаться",
DataSet.DisableControls / EnableControls
-
> [0] Drowsy (17.09.08 12:36)
> На форме грид, связанный с большой (по количеству записей) таблицей.
Уменьши (по количеству записей) "таблицу".
-
> Уменьши (по количеству записей) "таблицу".
вери-вери гуд джоке
-
> вери-вери гуд джоке
это не шутка, это намек на использование запросов, а не пухлых таблиц
юзеру не нужно больше 200 записей сразу, он не переварит их
-
> вери-вери гуд джоке
как-то ты в слове "эдвайс" аж хрен знает сколько ошибок допустил - "джоке".
-
> юзеру не нужно больше 200 записей сразу, он не переварит их
По секрету: юзеру в определённый момент времени редко бывает нужно записей больше, чем в гриде помещается... :)
-
> По секрету:
это явно автору, бо я много секретов знаю
-
> это явно автору,
Точно, мне.
Буду переваривать тему запроса вместо табла....
-
Вопрос по технике реализации "запроса вместо табла":
IBQuery -> Select в грид через Create View запихивать?
Или как-то по другому?
-
> [15] Drowsy (17.09.08 13:44)
> Или как-то по другому?
Через книжку желательно.
> IBQuery
IBDataSet
-
> Select в грид через Create View запихивать
это перпендикулярные вещи
select можно из таблиц, вьюх, процедур делать, и в разных комбинациях
-
> потому что букмарк имеет смысл только в рамках одного открытого
> датасета
> переоткрытие делает букмарки инвалидными, о чем прямо написано
> в справке
фАНТАСТИКА!!! Я вот был уверен что букмарк запоминает номер записи в датасете. И почему то у меня ещё ни разу запомненый до закрытия датасета букмарк не выбросился в мусор после переоткрытия. Если искомой записи нет в датасете, то, текущей становится запись с тем же номером, что был у запомненной.
А вот локате точно будет "дёргаться"
-
Да, добрый совет - НИКОГДА не обращайся к таблицам напрямую! Через запросы only! И желательно не прямой запрос, а через ХП!
Не буду обосновывать, просто убеждён что это правильнее, чем давать прямой доступ к таблице.
-
> Я вот был уверен что букмарк запоминает номер записи в датасете
type TBookmark = Pointer;
в общем случае указывает, на что угодно
в частном для ADO, например, хранит номер записи как элемент рекорда
> желательно не прямой запрос, а через ХП!
не буду холиварить, но если автор не знает, что такое запрос, то уж ХП ему рановато объяснять
тем более, что далеко не во всех СУБД есть
-
> Труп Васи Доброго © (17.09.08 15:23) [18]
> фАНТАСТИКА!!!
Реальность.
> прямой доступ к таблице.
Это как это?
> И желательно не прямой запрос, а через ХП!
Тоже маньяк? :)
-
> фАНТАСТИКА!!! Я вот был уверен что букмарк запоминает номер
> записи в датасете. И почему то у меня ещё ни разу запомненый
> до закрытия датасета букмарк не выбросился в мусор после
> переоткрытия. Если искомой записи нет в датасете, то, текущей
> становится запись с тем же номером, что был у запомненной.
> А вот локате точно будет "дёргаться"
Тебе просто ОЧЕНЬ сильно повезло.
-
Букмарки не стабильны и нормальный программист не будет их использовать никогда, если только не дурак.
-
> Anatoly Podgoretsky © (17.09.08 16:01) [23]
нам скальпель не нужен, у нас топор есть
?
-
> Anatoly Podgoretsky © (17.09.08 16:01) [23]
Я думаю, это чересчур категорично.
-
> Букмарки не стабильны и нормальный программист не будет
> их использовать никогда, если только не дурак.
Я использую. Для "пробега" по датасету - самое оно. Для мультиселекта в гриде - тоже. Всё стабильно работает уже х.з. сколько лет.
Что я делаю не так?
-
> Букмарки не стабильны и нормальный программист не будет
> их использовать никогда, если только не дурак.
Чё вы накинулись? Я реально был не в курсе и искренне удивлён таким высказываниям про букмарки. Я их пользовал достаточно редко, но когда пользовал, то ни разу не было сбоя(!!!) (наверное я везунчик) Я даже никогда их на валидность не проверял (теперь стыдно, но, блин, работате же..)
Обещаю впредь букмарки не использовать!
> Тоже маньяк? :)
Нет, не маньяк, но "человек базы" :) И предпочитаю всё программирование БД сводить к триггерам и ХП в самой базе, а на приложение оставляю лишь запросы с параметрами. ОЧЕНЬ удобно.
-
> Обещаю впредь букмарки не использовать!
впадение в крайности есть признак незрелого ума
ничего личного