Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.26;
Скачать: CL | DM;

Вниз

=Bookmark= и   Найти похожие ветки 

 
Drowsy   (2008-09-17 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;


 
Поросенок Винни-Пух ©   (2008-09-17 12:42) [1]

как то ты очень уж самоуверенно рисуешь код.
где проверки полученных букмарков на нил и на валид перед их применением?


 
Правильный$Вася   (2008-09-17 12:43) [2]

потому что букмарк имеет смысл только в рамках одного открытого датасета
переоткрытие делает букмарки инвалидными, о чем прямо написано в справке
фактически букмарк - это адрес, а что расположится по тому адресу после переоткрытия датасета - неизвестно, может, там вообще мусор будет, может - участок других данных
в самом оптимистичном частном случае - какая-то (не обязательно та жепо номеру) запись из свежеоткрытого датасета


 
Правильный$Вася   (2008-09-17 12:45) [3]

переход на запомненную записб лучше делать locate по ключу в датасете


 
Поросенок Винни-Пух ©   (2008-09-17 12:47) [4]

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

Да ладно. Не все так печально.


 
Drowsy   (2008-09-17 12:48) [5]

Ага, попробую с locate. Спасибо!


 
Drowsy   (2008-09-17 12:52) [6]

Только думаю, что grid всё равно будет "дёргаться", делая locate -ную строку первой видимой в гриде... :(


 
clickmaker ©   (2008-09-17 12:56) [7]

> [6] Drowsy   (17.09.08 12:52)
> Только думаю, что grid всё равно будет "дёргаться",

DataSet.DisableControls / EnableControls


 
Sergey13 ©   (2008-09-17 13:02) [8]

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


 
Drowsy   (2008-09-17 13:08) [9]


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

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


 
Правильный$Вася   (2008-09-17 13:12) [10]


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

это не шутка, это намек на использование запросов, а не пухлых таблиц
юзеру не нужно больше 200 записей сразу, он не переварит их


 
Ega23 ©   (2008-09-17 13:12) [11]


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


как-то ты в слове "эдвайс"  аж хрен знает сколько ошибок допустил - "джоке".


 
Ega23 ©   (2008-09-17 13:13) [12]


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


По секрету: юзеру в определённый момент времени редко бывает нужно записей больше, чем в гриде помещается...  :)


 
Правильный$Вася   (2008-09-17 13:17) [13]


> По секрету:

это явно автору, бо я много секретов знаю


 
Drowsy   (2008-09-17 13:20) [14]


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

Точно, мне.
Буду переваривать тему запроса вместо табла....


 
Drowsy   (2008-09-17 13:44) [15]

Вопрос по технике реализации "запроса вместо табла":
IBQuery -> Select в грид через Create View запихивать?
Или как-то по другому?


 
Sergey13 ©   (2008-09-17 13:48) [16]

> [15] Drowsy   (17.09.08 13:44)
> Или как-то по другому?

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

> IBQuery
IBDataSet


 
Правильный$Вася   (2008-09-17 13:54) [17]


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

это перпендикулярные вещи
select можно из таблиц, вьюх, процедур делать, и в разных комбинациях


 
Труп Васи Доброго ©   (2008-09-17 15:23) [18]


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

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


 
Труп Васи Доброго ©   (2008-09-17 15:27) [19]

Да, добрый совет - НИКОГДА не обращайся к таблицам напрямую! Через запросы only! И желательно не прямой запрос, а через ХП!
Не буду обосновывать, просто убеждён что это правильнее, чем давать прямой доступ к таблице.


 
Правильный$Вася   (2008-09-17 15:38) [20]


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

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

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

не буду холиварить, но если автор не знает, что такое запрос, то уж ХП ему рановато объяснять
тем более, что далеко не во всех СУБД есть


 
Johnmen ©   (2008-09-17 15:41) [21]


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

Реальность.

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

Это как это?

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

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


 
Ega23 ©   (2008-09-17 15:55) [22]


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


Тебе просто ОЧЕНЬ сильно повезло.


 
Anatoly Podgoretsky ©   (2008-09-17 16:01) [23]

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


 
ПРавильный$Вася   (2008-09-17 16:03) [24]


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

нам скальпель не нужен, у нас топор есть
?


 
Johnmen ©   (2008-09-17 16:05) [25]


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

Я думаю, это чересчур категорично.


 
Ega23 ©   (2008-09-17 16:15) [26]


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


Я использую. Для "пробега" по датасету - самое оно. Для мультиселекта в гриде - тоже. Всё стабильно работает уже х.з. сколько лет.
Что я делаю не так?


 
Труп Васи Доброго ©   (2008-09-17 16:19) [27]


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

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

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

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


 
Правильный$Вася   (2008-09-17 16:29) [28]


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

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



Страницы: 1 вся ветка

Текущий архив: 2008.10.26;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.015 c
1-1200945405
RzCoDer
2008-01-21 22:56
2008.10.26
Перехват консольного вывода


2-1221641606
vegarulez
2008-09-17 12:53
2008.10.26
Вопрос про DBGrid.DataSource.DataSet.FieldValues[];


2-1221686355
DBGrid
2008-09-18 01:19
2008.10.26
Убрать ScrollBar


2-1221815015
cruiser
2008-09-19 13:03
2008.10.26
Отлов нажатия определенной комбинации клавиш


2-1221392760
Scary
2008-09-14 15:46
2008.10.26
Из ресурса в скрытый файл