Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];

Вниз

=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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.037 c
15-1220458307
@!!ex
2008-09-03 20:11
2008.10.26
Началось...


3-1208352253
SkyN
2008-04-16 17:24
2008.10.26
Программа на Delphi в качестве ODBC источника.


2-1221659101
Terasbetoni
2008-09-17 17:45
2008.10.26
Как клонировать экземпляр компонента


15-1220494565
Slider007
2008-09-04 06:16
2008.10.26
С днем рождения ! 4 сентября 2008 четверг


15-1218174240
TUser
2008-08-08 09:44
2008.10.26
Объявлена дата запуска LHC





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский