Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FibDataSet быстрая работа 
:(
    Опции темы
Delphist
Дата 6.12.2006, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Проблема следующая. Есть форма с гридом и MainFIBDataSet'ом.Transation = MainFIBTransaction, у которого 4 колонки. Данные в этот грид вносятся не напрямую, а через модальную форму с четырьмя  Edit'ами. Все эти четыри Edot'a напрямую с колонками грида не связаны, это сделано за тем, чтобы вводимые пользователем данные в Edit'ы не отображались сразу же в колонках. После нажатия кнопки OK модальной формы выполняется запрос(update или insert) в отдельном TFIBDataSet'e, у которого в качестве транзакции используется такая же транзакия, что и у MainFIBDataSet'ом, а  MainTransaction.
После закрытия модального окна внесенные данные сразу в строке грида не отображаются и приходится делать:
Код

MainFIBDataSet.Close;
MainFIBDataSet.Open;
{Становится на предыдущую запись - в KeyValue хранится значения ID пред. запсиси. Я не люблю пользоваться MoveBy или Bookmark'ами}
MainFIBDataSet.Locate(KeyName, KeyValue, [])


Если записей в гриде много ~>10000 MainFIBDataSet.Locate - приводит к торможению.
Поэтому возникает вопрос - как сделать так чтобы данные внесенные в мод. форму сразу после нажатия "OK" отображались в гриде. Все это позволит избежать использования MainFIBDataSet.Close; MainFIBDataSet.Open; MainFIBDataSet.Locate(KeyName, KeyValue, []). Желательно без CacheUpdate так как мои FIBs их не поддерживают должным образом.


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Akella
Дата 6.12.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



наверное только так, как ты и делаешь, только ты неправильно делаешь, что выводишь в грид все 10 тысяч записей, выбирай по определенному условию: по дате, например.
PM MAIL   Вверх
x77
Дата 6.12.2006, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 1
Всего: 22



убил свой предыдущий пост, показалось - неправильно понял вопрос.... и всё таки попробуй 

Код

MainFIBDataSet.DisableControls;
try
  MainFIBDataSet.Close;
  MainFIBDataSet.Open;
  {Становится на предыдущую запись - в KeyValue хранится значения ID пред. запсиси. Я не люблю пользоваться MoveBy или Bookmark'ами}
  MainFIBDataSet.Locate(KeyName, KeyValue, [])
finally
  MainFIBDataSet.EnableControls;
end;


само по себе это здорово ускорит переоткрытие на нескольких десятках тысяч записей. если оно не ускорит, то надо иметь в виду, что сам по себе любой запрос открывается мгновенно, даже если он содержит миллионы записей. открытие будет медленным только в том случае, если  запросе используются агреггиррованные функции, какие-то сортировки и пр. - что-то, что заставляет СУБД фетчить его весь при первом же открытии. тупой "select" -  всегда отработает моментально и без проблем. поэтому для ускорения переоткрытия имеет смысл переделать сам запрос. как вариант - поиграться с просмотром, который хранится в СУБД в уже откомпилированном виде.

Это сообщение отредактировал(а) x77 - 6.12.2006, 13:05


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Delphist
Дата 6.12.2006, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(x77 @  6.12.2006,  14:04 Найти цитируемый пост)
тупой "select" -  всегда отработает моментально и без проблем. поэтому для ускорения переоткрытия имеет смысл переделать сам запрос. как вариант - поиграться с просмотром, который хранится в СУБД в уже откомпилированном виде

Процер уходит на сотку именно на:
MainFIBDataSet.Locate(KeyName, KeyValue, [])
Locate я использую именно для того, чтобы вставь на предыдущую запись.


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
x77
Дата 6.12.2006, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 1
Всего: 22



Delphist, насколько я понял, MainFIBDataset, как раз, и привязан к гриду. если визуализация контролов не отключена - её надо обязательно отключить. Locate должен работать быстрее, тем более, что ключевое поле всегда индексировано.


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Delphist
Дата 6.12.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(x77 @  6.12.2006,  15:12 Найти цитируемый пост)
если визуализация контролов не отключена - её надо обязательно отключить

Да и так я ставлю MainFIBDataset.DisableControl и MainFIBDataset.DisableScrollEvents; Все равно медленно



--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Akella
Дата 6.12.2006, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



да вы сами подумайте - 10 тысяч записей загрузить и искать среди них. А памяти сколько сжирают они...
Как по мне, так это неправильная реализация. Нужно показывать меньше записей.
PM MAIL   Вверх
Delphist
Дата 6.12.2006, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(Akella @  6.12.2006,  16:51 Найти цитируемый пост)
да вы сами подумайте - 10 тысяч записей загрузить и искать среди них. А памяти сколько сжирают они...
Как по мне, так это неправильная реализация. Нужно показывать меньше записей. 

Вообщем это нормальное явления, когда на 10000 записях проявляются торможения.



--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Akella
Дата 7.12.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



ставь проц помощнее и памяти побольше, и винт побыстрее
PM MAIL   Вверх
Alex
Дата 8.12.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



Многие ответ сочтут грубым, но Delphist, перечитай мануалы по FIB+ и тутже поймешь, что ты изобретаешь велосипед, люди не просто так дают тебе для DataSet задать две транзакции, читающую и пишущую, не просто так дают тебе кучу настроек поведения DataSet после добавления, удаления и редактирования записей.

PS: Ты уже не первый год пользуешься библиотекой, а взять и элементарно прочитать документацию досихпор не можешь...


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0620 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.